2.反转一个单链表
如何反转?节点不变,改变节点指向,如图
思路做法:只需要修改每个节点的指向,如何改变每个节点的指向?引入一个prev,
让cur.next=prev
prev = cur
cur = cur .next
3.给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点
思路做法:引用两个指针,快慢指针,fast和slow,fast一次走两步,slow一次走一步,当fast走到最后的时候,slow就在中间位置!
扫描二维码关注公众号,回复:
13835184 查看本文章
引入指针fast和slow
4. 输入一个链表,输出该链表中倒数第k个结点。
思想,做法:引用两个指针,fast和slow,先让fast走k-1布,再让slow和fast一起走!
代码
5. 将两个升序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
先画两个链表,headA和headB
做法,思想,首先我们先申请一个虚拟节点(傀儡节点),作用:val12和val13相比较谁小就把他串在这个虚拟节点里面。
代码
如何创建两个链表并打印
结果
6. 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。
这道题的思想是,我们有两个区间,把小于x的放一个区间,大于x的放一个区间,再将两个区间拼起来
代码
7. 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
代码