链表

单链表的反转

给定一个单链表的头 head,完成链表的逆序调整

image-20211230130842084

将原链表从Head开始取出(原链表指针为head,新链表指针为newHead),一次添加到新链表的Head上即可完成逆序操作。代码如下:

更简单的理解方式:所有箭头方向调换

双链表的反转

image-20211230141458348

如上图所示,双链表的反转比单链表更简单,只需要将上述所有元素的next指针与last指针指向的元素完全互相调换即可,代码如下:

删除单链表指定的值

K个节点的组内逆序调整

LeetCode: 25. K 个一组翻转链表 - 力扣(LeetCode) (leetcode-cn.com)

链表问题画图处理

我自己的解法:

两个链表相加

给定两个链表的头结点head1和head2,认为从左到右是某个数字从低位到高位,返回相加之后的链表。例子:

解析,可以用加法的竖式来完成这个功能:

循环遍历链表,分为两个阶段:

  1. 在短链表内范围的数字相加,注意记录进位信息

  2. 在短链表外,长链表内的数字相加,注意处理进位信息

  3. 处理溢出的进位

代码如下:

两个有序链表的合并

给定两个有序链表头节点 head1和head2,返回合并之后的大链表,要求依然有序。例子:

思路:

  1. 找到较小的头部,那么这个链表就是主链表,也就是新链表的头

  2. 两个指针 cur1 和 cur2,cur1指向主链表头部,cur2 指向副链表头部

  3. 移动cur1

    1. 如果cur1的新值小于cur2所处的位置,继续移动cur1

    2. 如果cur1的新值大于cur2所处的位置,将cur2所处元素插入到cur1,并移动cur2指针到链表的下个位置

  4. 当cur1移动到尾部时,将cur2剩余节点全部拼接到主链表中,链表的合并已经完成

  5. 当cur2移动到尾部时,链表的合并已经完成

代码:

最后更新于

这有帮助吗?