当前位置: 首页 > wzjs >正文

锦州建设局网站央视十大广告代理公司

锦州建设局网站,央视十大广告代理公司,建网站要去备案,重庆seo俱乐部联系方式核心考点预览:链表 (双指针) 技巧:虚拟头结点 题目描述: 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应…

核心考点预览:链表 (双指针)  技巧:虚拟头结点

题目描述:

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

示例 1:

输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

示例 2:

输入:head = [2,1], x = 2
输出:[1,2]

提示:

  • 链表中节点的数目在范围 [0, 200] 内

  • -100 <= Node.val <= 100

  • -200 <= x <= 200

详细解答:

方法一:

// 定义链表节点结构
struct ListNode {int val; // 节点值struct ListNode *next; // 下一个节点指针
};// 对链表进行分隔,使得所有小于x的节点在前,大于等于x的节点在后
struct ListNode* partition(struct ListNode* head, int x) {struct ListNode *p, *q, *res = (struct ListNode*)malloc(sizeof(struct ListNode));res->next = NULL; // 初始化头节点p = head; // p指针用于遍历原链表q = res; // q指针用于构建新链表,开始时指向虚拟头节点// 第一步:将所有小于x的节点放入新的链表while (p != NULL) {if (p->val < x) {struct ListNode* temp = (struct ListNode*)malloc(sizeof(struct ListNode));temp->val = p->val; // 复制节点值temp->next = NULL;  // 设定新节点的next为NULLq->next = temp;     // 将新节点链接到当前链表q = temp;           // 更新q为新节点}p = p->next; // 移动到下一个节点}// 第二步:将所有大于等于x的节点放入新的链表p = head; // 重新指向原链表头while (p != NULL) {if (p->val >= x) {struct ListNode* temp = (struct ListNode*)malloc(sizeof(struct ListNode));temp->val = p->val; // 复制节点值temp->next = NULL;  // 设定新节点的next为NULLq->next = temp;     // 将新节点链接到当前链表q = temp;           // 更新q为新节点}p = p->next; // 移动到下一个节点}// 返回分隔后的链表,跳过虚拟头节点return res->next;
}

题目解析

思路分析
  1. 两个链表:使用两个步骤,分别处理小于 x 和大于或等于 x 的节点,将它们合并在一个新链表中。
    • 第一步:遍历原链表,将所有小于 x 的节点复制到新链表中。
    • 第二步:重新遍历原链表,将所有大于或等于 x 的节点复制到新链表中。
  2. 注意:两个分区中的节点相对顺序保持不变。每次分配新节点时,我们保持链表顺序。
  3. 链表构建:需要两个指针 pq 来分别遍历原链表和构建新链表。
考点分析
  • 链表操作:链表的遍历、节点的插入,要求保留相对顺序。
  • 空间管理:每次插入一个新节点时,都需要使用 malloc 分配内存。
  • 时间复杂度:因为每次遍历整个链表,所以时间复杂度为 O(n),其中 n 是链表的长度。

这道题的难点在于如何分隔链表,并保证每个分区内的相对顺序不变。通过分两次遍历原链表并插入新的节点,可以有效地解决该问题。

易错点:

1.没有使用temp,导致原链表的顺序改变,在第二次遍历的时候走的都是第一轮改过的路径,即都走的是小于x的值

2.没有考虑下面这组测试用例:

head=[]  x=0;

如果没有在开始对res->next=NULL;的话,会导致最后返回的时候不知道res->next是什么

方法二:

// 定义链表节点结构
struct ListNode {int val; // 节点值struct ListNode *next; // 下一个节点指针
};// 对链表进行分隔,使得所有小于x的节点在前,大于等于x的节点在后
struct ListNode* partition(struct ListNode* head, int x) {struct ListNode *cur, *p, *q, *res, *res1 = (struct ListNode*)malloc(sizeof(struct ListNode)), *res2 = (struct ListNode*)malloc(sizeof(struct ListNode));p = res1; // p指针用于构建小于x的链表q = res2; // q指针用于构建大于或等于x的链表cur = head; // cur指针用于遍历原链表// 遍历链表,将小于x的节点放入res1链表,大于等于x的节点放入res2链表while (cur != NULL) {if (cur->val < x) {p->next = cur; // 将cur节点加入res1链表p = p->next;   // 更新p为当前节点} else {q->next = cur; // 将cur节点加入res2链表q = q->next;   // 更新q为当前节点}cur = cur->next; // 移动到下一个节点}q->next = NULL; // 确保res2链表的尾部没有循环(结束)// 将res1链表和res2链表连接起来res = res1; // res指向小于x部分的虚拟头节点p->next = res2->next; // 将大于等于x的部分连接到小于x的部分后// 返回合并后的链表,从res->next开始return res->next;
}
易错点:

在最后添加 q->next=NULL; 以保证在主函数输出的时候能找到结尾

思路分析
  1. 虚拟头节点:通过 res1res2 虚拟头节点来分别存储小于 x 和大于等于 x 的节点。这样可以简化操作,避免在连接节点时处理特殊情况。
  2. 链表合并:遍历原链表,将小于 x 的节点放入 res1,大于等于 x 的节点放入 res2,最后将两个链表连接起来,保证了相对顺序不变。
  3. 连接步骤
    • 在遍历完链表后,pq 分别指向各自链表的尾部,将 res1res2 链表通过 p->nextq->next 连接起来。
    • 注意:q->next = NULL; 这一行代码用于确保 res2 链表最后的节点不再指向其他节点,避免形成环。

文章转载自:

http://ASg0v0N2.tdscL.cn
http://6qbfYRRg.tdscL.cn
http://sUOeyOl2.tdscL.cn
http://GfStgC1t.tdscL.cn
http://aSnJSpIr.tdscL.cn
http://lkMRNrup.tdscL.cn
http://HuYJiBOb.tdscL.cn
http://5ZWIsyzs.tdscL.cn
http://ZhEuF4jk.tdscL.cn
http://Q52RQATT.tdscL.cn
http://kMh6kecA.tdscL.cn
http://v2gQbsMY.tdscL.cn
http://g0D0PQNw.tdscL.cn
http://9zzc48l1.tdscL.cn
http://h2bDIzgf.tdscL.cn
http://WGadJw9h.tdscL.cn
http://Jj6V5UkJ.tdscL.cn
http://71cimNru.tdscL.cn
http://mXarvz5B.tdscL.cn
http://liJp5iy6.tdscL.cn
http://Wghxk2fH.tdscL.cn
http://glUbQRVE.tdscL.cn
http://IPdbRimt.tdscL.cn
http://ZZf3TroE.tdscL.cn
http://5MLyXUv7.tdscL.cn
http://lxK7Xlia.tdscL.cn
http://RqiSREnE.tdscL.cn
http://3JePuxpT.tdscL.cn
http://4R71TRxh.tdscL.cn
http://275KCaWd.tdscL.cn
http://www.dtcms.com/wzjs/645658.html

相关文章:

  • 手机h5免费模板网站网络工程师课程
  • 学校网站cms做效果图需要什么软件
  • 太原富库网站建设wordpress产品上传
  • 景德镇建站公司响应式网站的建设
  • 深圳 教育集团网站建设门户网站建设招标书
  • seoyoon入门seo技术教程
  • 凡科网做网站怎样云南建设银行官方网站
  • wordpress网站关闭常州住房和城乡建设局网站
  • 建站用什么平台好红豆网梧州论坛
  • 西安网站建设哪家强wordpress标题图片
  • 企业建一个网站需要多少钱wordpress 验证表单
  • 漯河网站建设哪家网站上动态图片怎么做
  • 做的好点的外贸网站吉林省吉林市丰满区
  • 高速建设材料在哪个网站购买成都网络推广运营
  • 网站栏目描述网站页面链接怎么做
  • 常州网站制作方案《网站推广策划》
  • 做寝室介绍网站外贸企业网站建设一条龙
  • 中山市智能h5网站建设公司freenom申请域名
  • 服装箱包网站建设品牌策划公司名字大全
  • 网站建设开发哪家好宝安中心网站建设
  • 免费做的网站怎么设置域名怎么给网站加外链
  • 芜湖网站开发阿里云做网站电话
  • 网站正在升级建设中广东建设工程执业资格注册中心网站
  • 长沙品质企业建站服务电话仿站网
  • 三亚市建设局网站帮人家做网站
  • 如果建设一个网站seo排名关键词
  • 网站技术可行性天津百度百科
  • 学网站开发月薪多少钱内部网
  • 上海做网站推广公司苏州网站制作聚尚网络
  • 网站建设鸿儒集团网站品牌建设特点