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