美文网首页
leetcode82/86 虚拟头结点

leetcode82/86 虚拟头结点

作者: vaisy | 来源:发表于2022-11-05 15:24 被阅读0次

82原题地址
与之类似的还有86.分隔链表
86更简单一些:
比x小的都在大于等于x的节点之前,我是这样做:
定义三个指针:
q指向当前已经有序的链表里,小于x的最后一个;
cur记录当前有序链表的最后一个;
p用来遍历;
遍历p的时候,如果p大于等于x就不用处理,但小于又分两种:
1.头部大于等于x,需要换到头部前面;(只处理一次)
2.其他情况下,p只需要续到q后面;
正常的思路应该是:
cur->next=p->next;//后面的移除p
q->next=p;//前面的插入p;
p->next=q->next->next;
那么我假设这里的情况是 1 2 3 4 5,x是5
那么到p=3的时候 q=2;cur=2;
然后你就会发现:cur==p的前提下,2的下一步会成为p,原先的p->next会丢失。
所以cur==p的情况需要单独处理:
p,q,cur三个指针都顺移一位就可以了。

82比86复杂的点在于:
当A点与下一个点相等,往后顺延等于next即可,A点本身如何删去?
固然保留A前面的点是一种方法,
但我要判断A->next==A->next->next 保证他们非空的链条也太长了
所以说之前那种强行搬指针的路是很要命的

题解的思路才是正常刷题人的想法:
1.快慢指针;
2.虚拟头结点;
以86为例,分别做两个头结点,p指向head,q指向大于等于x的节点;
那么处理起来只需要:
创建两个新链表,小于x的(包括head)跟在p后面,大于x的放在q后面;(注意保持q->next=null)
然后p->next=q,返回p的头部就可以了;

相关文章

  • leetcode82/86 虚拟头结点

    82原题地址[https://leetcode.cn/problems/remove-duplicates-fro...

  • 链表—虚拟头结点

    冰冻非一日之寒 上篇讲到,向index处添加结点时,需要特殊处理头结点,因为头结点没有前一个结点。那假设,我们为头...

  • Leetcode82-删除排序链表中的重复结点Ⅱ

    Leetcode82,难度:Medium 解答: 方法一:记录重复结点的值 时间复杂度:n;空间复杂度:1 8ms...

  • C++ 单链表(带虚拟头节点)

    为了操作方便,统一所有节点的处理逻辑,可以在最前面增加一个没有实际含义的 虚拟头结点 ,这个虚拟头结点不存储有效数...

  • 第十六周

    Algorithm 链表问题,技巧创建虚拟头结点 Reverse Linked List Review Tips/...

  • LRU 缓存

    采用哈希表+双向链表的数据结构,双向链表创建虚拟头结点、虚拟尾结点,用来查询最近最少使用的元素,刚刚使用或添加的元...

  • 数数据结构入门——大师:链表(三)使用 dummyHead

    1.为什么用dummyHead虚拟头结点 对于add操作我们addFirst 总是和其他地方不一样,因为头结点是没...

  • 链表

    头指针与头结点的异同 头指针为链表的必要元素,指向第一个结点(若有头结点则指向头结点) 头结点为链表的非必要元素(...

  • 数据结构与算法之线性表的链式表示和实现

    理清概念:头指针:链表如果存在头结点则指向头结点,否者指向首结点。头结点:为了方便对链表的操作而引入的一个结点,数...

  • go语言中三种类型链表的结构

    单向链表: 头结点在链表中不是必须的,但增加头结点有以下几点好处:1.增加了头结点后,首元结点的地址保存在头结点的...

网友评论

      本文标题:leetcode82/86 虚拟头结点

      本文链接:https://www.haomeiwen.com/subject/ihkcgrtx.html