在这些题目中,主要用到了哑结点法,双指针法,快慢指针法等等。先将所有题型及其对应的解题技巧总结如下:
哑结点法结合双指针法
使用方法:dumpy + pre + cur. 或 dumpy + p1 + p2
在链表中,涉及到删除节点,需要使用pre来指向被删除节点的前一个节点。又因为头结点可能被删除,而头结点的pre为空。如果只用pre和cur两个指针,则需要讨论pre是否为空这种情况。为了将头结点一般化,在头结点前面,加上一个哑结点,从而可以减少代码中的讨论。使用范围:链表的删除
- 1.删除链表中的节点_leetcode273
- 2.移除链表元素_leetcode203
- 3.删除链表的倒数第N个节点_leetcode19
- 4.删除排序链表中的重复元素_leetcode83
- 5.删除排序链表中的重复元素 II_leetcode82
使用范围:链表的合并
哑结点+特殊位置节点法+首尾链接+断开;
在改变链表结构的题目中,关键是根据题意,找到结构变换后的头结点和尾结点。比如,旋转链表_leetcode 61 一题中,向后旋转n个节点,主要是旋转后的新链表的头结点和尾结点。而旋转后的头结点,是原链表中的倒数第n个节点。旋转后的尾结点为原链表中的倒数第n+1个节点。因此,题目转化为求倒数第n个节点和倒数第n+1个节点。
使用范围:链表的翻转
头插法
在链表翻转的题目中,使用头插法,会很简单。
快慢指针法
快慢指针法,是指在遍历链表的过程中,使用两个指针,快指针是慢指针速度的两倍。这样,当快指针到到尾部是,慢指针为链表中的中点。依据此类方法,可以解决链表中结构中判断的一些问题。
常见遍历 + 哈希表
在复杂链表的存储一题中,使用了HashMap来对复制节点和原节点的信息记录。