92. Reverse Linked List II
来源:互联网 发布:淘宝总公司投诉电话 编辑:程序博客网 时间:2024/05/01 14:37
/** * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function if (head == NULL) return NULL; ListNode *q = NULL; ListNode *p = head; for(int i = 0; i < m - 1; i++) { q = p; p = p->next; } ListNode *end = p; ListNode *pPre = p; p = p->next; for(int i = m + 1; i <= n; i++) { ListNode *pNext = p->next; p->next = pPre; pPre = p; p = pNext; } end->next = p; if (q) q->next = pPre; else head = pPre; return head; }};
对这种链表题还是比较混啊。。。。多看看
参考http://www.cnblogs.com/remlostime/archive/2012/11/18/2776273.html
简单的思路:
首先根据m和n找到第m个结点以及它之前的结点mp,第n个结点以及它之后的结点nn。
然后将这之间的链表反转,再跟原来的mp和nn接上。
使用dummy头结点,简化代码书写。
/** * 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) return head; ListNode *dummy = new ListNode(INT_MAX); dummy->next = head; ListNode *start = head; ListNode *startPre = dummy; ListNode *end = head; ListNode *endNext = NULL; for(int i = 1;i<m;++i) { if(i == m-1) startPre = start; start = start->next; } for(int i = 1;i<n;++i) { end = end->next; } endNext = end->next; ListNode* prev = startPre; ListNode* cur = start; ListNode* next = cur->next; while(cur != endNext) { cur->next = prev; prev = cur; cur = next; if(next) next = next->next; } startPre->next = end; start->next = endNext; return dummy->next; }};
0 0
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- default-lazy-init and lazy-init
- Android进阶(二)https请求No peer certificate的解决方法.
- Objective-C - @property参数
- C#中枚举类型的使用
- Scala编程指南(3) 揭示Scala的本质
- 92. Reverse Linked List II
- 理解Certificate、App Id、Identifiers 和 Provisioning Profile
- metasploit - meterpreter commands (linux)
- shell脚本编程(快速排序)
- 15.精灵进阶之给节点添加动作
- R语言中的并行计算——二、搭建R的集群
- SQL Server 损坏修复
- LeetCode twoSum
- Java垃圾回收是如何工作的?