首页 > 其他 > 详细

LeetCode-链表题总结

时间:2020-03-15 00:27:58      阅读:79      评论:0      收藏:0      [点我收藏+]

一. 链表反转类

        解决这类问题的关键在于分析指针的变化情况。

  1. 反转链表 (leetcode206)

      定义新节点pre为新链表的尾部,遍历时将当前结点插入。

     技术分享图片

 

 

  2. 成对交换 (leetcode24)

     这里和上题类似,只不过是每两个结点进行遍历操作。

       i) 更新遍历的节点位置

       ii)进行结点移动操作,这里主要是总结出移动后的指向。

      技术分享图片

 

 

  3.  K个一组翻转链表(leetcode25)

     这一题又和上题类似,只不过每次操作变成了k个元素。把握每次遍历时的节点更新操作(newCur和newPre),每次移动的规律(这里是对k个进行移动)

     技术分享图片

 

 

    总结规律:

      用遍历的方法,只不过每次遍历时操作的节点数不同,需要提前对遍历iterator的更新值进行保存。

     在每一次过程中,找出移动的规律结点指向的变化

 

二. 快慢指针类

1. 删除链表的倒数第N个结点(leetcode19)

   i) 快指针先定位到N位置,之后快慢指针一起移动(但这里我移动到删除位置的前一个)

   ii) 需要分几类情况分别考虑 - 删除表头/表尾/中间结点

  技术分享图片

2. 环形链表 - 判断链表中是否有环(leetcode141)

   快指针每次走2步,慢指针每次走1步,判断是否会相等(或快指针先为空)

   技术分享图片

3. 环形链表II - 找到环的位置(leetcode142)

这里的分析非常关键,还可以进行拓展(比如计算链表的长度

技术分享图片

4. 旋转链表 

     这里和删除倒数第N个结点有类似之处。

    关键:1)确定好newHead, newTail的位置 —— 采用快慢指针进行定位

             2)分情况进行讨论(头/尾/中间位置)

技术分享图片

 

 

三. 对链表插入、遍历等基本操作

 1. 对链表进行插入排序 (No.147)

    这一题就是对链表进行遍历,同时保存一个新链表(有序),每次遍历,执行在新链表上的插入操作。

    这里也要根据插入的位置分类讨论。

 技术分享图片

 

 

 

 

 

 

 

 

LeetCode-链表题总结

原文:https://www.cnblogs.com/xxwu1999/p/12495208.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!