LeetCode92. Reverse Linked List II
来源:互联网 发布:淘宝几个好评一个心 编辑:程序博客网 时间:2024/06/15 07:52
LeetCode92. Reverse Linked List II
原地址
题目描述
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL. Note: Given m, n satisfy the following condition:
思路
首先根据m和n找到链表需要逆转的部分的头的前一个位置和尾的前一个位置,设为pBegin和pEnd(考虑到头结点前面没有结点,所以我们需要设置一个虚假头结点fake,使fake->next=head),初始化都指向fake。
ListNode* fake=new ListNode(0); fake->next = head; ListNode *pBegin=fake, *pEnd=fake; int distance = n - m ; while(pEnd && distance>0){ pEnd = pEnd->next; distance--; } while(pBegin && pEnd && m-1>0) { pBegin = pBegin->next; pEnd = pEnd->next; m--; }
然后设置一个p结点指向需逆转部分的头结点(p=pBegin->next),设置一个q结点指向需逆转部分的尾结点的后一结点(p=pEnd->next->next),并设置逆转后部分链表的头结点pHead,p插到原始q的后面,头结点pHead和p依次后移,直到p==q为止(具体看代码和图片(手绘……))
ListNode *p = pBegin->next; ListNode *q = pEnd->next->next; ListNode *pHead = q; while(p != q){ ListNode* node = p->next; p->next = pHead; pHead = p; p = node; }
最后将逆转部分的链表接入原链表
pBegin->next = pHead;
代码实现
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { if (head==NULL || m>=n) return head; ListNode* fake=new ListNode(0); fake->next = head; ListNode *pBegin=fake, *pEnd=fake; int distance = n - m ; while(pEnd && distance>0){ pEnd = pEnd->next; distance--; } while(pBegin && pEnd && m-1>0) { pBegin = pBegin->next; pEnd = pEnd->next; m--; } if (pBegin==NULL || pEnd==NULL || pEnd->next == NULL){ return head; } ListNode *p = pBegin->next; ListNode *q = pEnd->next->next; ListNode *pHead = q; while(p != q){ ListNode* node = p->next; p->next = pHead; pHead = p; p = node; } pBegin->next = pHead; return fake->next; }};
ps: 这一题是看了GitHub上的题解,根据自己的思路写了总有些地方存在问题,不过仔细分析这份代码就当学习了吧!不会在博客里画图表,流程图这些东西 ,只好手绘了,大家见谅。有会画的大牛欢迎指导。
0 0
- Reverse Linked List II Leetcode92
- LeetCode92 Reverse Linked List II
- LeetCode92. Reverse Linked List II
- LeetCode92 Reverse Linked List II
- leetcode92~Reverse Linked List II
- leetcode92. Reverse Linked List II
- leetcode92. Reverse Linked List II
- LeetCode92. Reverse Linked List ii
- leetcode92. Reverse Linked List II
- leetcode92. Reverse Linked List II
- LeetCode92 Reverse Linked List II
- LeetCode92——Reverse Linked List II
- 算法作业HW10:Leetcode92 Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- oracle 查看用户下的所有表
- 浅析分形迷宫搜索解法
- [C++杂谈]:正则表达式的使用
- 设计模式这原型模式---高上
- 【NOIP模拟】打膈膜
- LeetCode92. Reverse Linked List II
- 剑指Offer 28题 字符串的排列 Java版
- 嵌入式以太网第一部分——ENC28J60网卡驱动
- React Native通讯原理
- POI处理EXCEL文件(读取,写入)
- Node.js的调试
- 设计模式之工厂模式---高上
- 基本eclipse的maven项目开发
- 大数据和我们