
链表操作
Czy_whlg
不忘本心!
展开
-
Reorder List
解析:本题考察快慢指针和链表反转整体思路:1.将整个链表划分为两部分:利用快慢指针,快指针每次走两步,慢指针每次走一步,最终慢指针所到达的位置就是链表划分的位置2.将第二部分的链表反转(可以参考我之前的一篇博文)3.将反转后的第二部分链表依次插入到第一部分的链表注意:将反转链表插入到另外的链表中,特别需要注意保存反转链表的下一个节点[指针问题很难调试,哎~],多画图,多画图,多画图...原创 2019-10-26 19:29:08 · 169 阅读 · 0 评论 -
Linked List Cycle II
解析:这道题还是有难度的,主要是涉及到数学简单公式的推导,这恰恰是我们编程当中最不愿意分析的,可能是思维定式吧~这篇博文分析的很到位核心:快慢指针,假设快指针fast每次走两步,慢指针slow每次走一步,那么如果存在回环,那么如果存在环路,快指针走完一圈后,定会和慢指针在某一点相遇,毕竟在天才,如果不努力,迟早也会被人追上的(哈哈,扯远啦~~~~)1.假设X为出发点,Y为环的入口,Z为相...原创 2019-10-26 19:02:00 · 131 阅读 · 0 评论 -
Copy List with Random Pointer
解析:题目大意就是深复制链表[即新链表每个节点的指针不能指向原来的空间]难点:random指针可以随意指向链表的任何一个节点,链表不像顺序存储的数组,可以容易地获取到任意位置上的元素,链表要取到某个节点的值,必须得从头遍历,这也是操作链表的难点所在分析:1.新链表当前节点的next指针只有2种状态:①指向新的节点②指向之前创建的节点2.新链表当前节点的random指针存在3种状态:...原创 2019-10-25 20:43:28 · 286 阅读 · 0 评论 -
Remove Nth Node From End of List
解析:删除第n个节点一般碰到链表操作的题,先将题目的无头节点的链表表示成有头结点的链表,这是很重要的,很重要,很重要1.获取链表的节点总个数,因为链表不像数组,它每次都得从头开始遍历寻找节点2.将删除末尾第n个元素转化为删除开头的第几个元素,因为链表是从头开始遍历的n = len - n + 13.将第(n-1)个节点的指针指向第(n+1)个节点即可关键在于获取所删除元素的上一个节...原创 2019-10-24 17:25:29 · 117 阅读 · 0 评论 -
Reverse Linked List II
解析:指针的操作,为了防止m=1,一般都会把无头结点的链表创建成有头节点的链表,以题目中的示例为例:pre指向第m个节点的前一个节点,此节点一直都是保持不变的,cur指向第m个节,t为cur的下一个节点,每次只要进行一下四步操作:1.获取当前节点的下一个节点:t = cur->next2.将当前节点指向t的下一个节点,先将两端连接起来:cur->next = t->ne...原创 2019-10-18 17:33:21 · 159 阅读 · 0 评论 -
Rotate List
第一种解法:采用STL库中的list1.遍历链表,将节点保存在list当中2.对list中的节点进行重新的调整,向左旋转一位,即将最后一个元素删除,然后插入到第一个位置,依次处理k个节点current = v_list.back(); v_list.pop_back(); v_list.push_front(current);3.list中节点的顺序即为最终的链表顺序,利用list中的节...原创 2019-10-15 20:09:23 · 134 阅读 · 0 评论 -
Add Two Numbers
@TOC解决方法:/**Definition for singly-linked list.struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};/class Solution {public:ListNode addTwoNumbers...原创 2019-10-10 21:52:47 · 105 阅读 · 0 评论