Leetcode: Reverse Linked List II
来源:互联网 发布:淘宝 无忧退货 运费 编辑:程序博客网 时间:2024/04/29 12:02
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:
1 ≤ m ≤ n ≤ length of list.
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head){if(head==NULL || head->next ==NULL)return head;ListNode* tmp = reverseList(head->next);head->next->next = head;head->next = NULL;return tmp;}ListNode *reverseBetween(ListNode *head, int m, int n) { // Note: The Solution object is instantiated only once. //1 <= m <= n <= length of list.if(head==NULL || m>=n)return head;ListNode* pm = NULL;ListNode* pn = NULL;if(m==1){ListNode* p=head;while(--n) p=p->next;pn=p->next;p->next = NULL;head = reverseList(head);p=head;while(p->next) p=p->next;p->next = pn;return head;}else{pm = head;while(--m > 1) pm = pm->next;ListNode* p = head;while(--n) p = p->next;pn = p->next;p->next = NULL;pm->next = reverseList(pm->next);p=pm->next;while(p->next) p=p->next;p->next = pn;return head;} }};
精简下代码,1.通过在前面放一个节点不再判断是不是head;2.通过插入节点的方式不再翻转链表。
/** * 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) return head; ListNode* tmp = new ListNode(0); tmp->next = head; head = tmp; int idx = 1; ListNode* p = head; while(idx < m){ p = p->next; idx++;} ListNode* insertNode = p; p = p->next; tmp = p; while(idx <= n){ ListNode* q = p->next; p->next = insertNode->next; insertNode->next = p; p = q; idx++; } tmp->next = p; return head->next; }};
- LeetCode[Linked List]: Reverse Linked List II
- LeetCode: Reverse Linked List II
- LeetCode: Reverse Linked List II
- [LeetCode] Reverse Linked List II
- [Leetcode] Reverse Linked List II
- [LeetCode]Reverse Linked List II
- Leetcode: Reverse Linked List II
- [Leetcode]Reverse Linked List II
- [leetcode]Reverse Linked List II
- LeetCode-Reverse Linked List II
- LeetCode Reverse Linked List II
- [leetcode] Reverse Linked List II
- LeetCode - Reverse Linked List II
- [LeetCode] Reverse Linked List II
- LeetCode | Reverse Linked List II
- 【leetcode】Reverse Linked List II
- Leetcode: Reverse Linked List II
- leetcode Reverse Linked List II
- 打造属于你自己的Mac 机器人助手
- 链表的操作
- 07-python_数据类型-字典
- windows 文件名太长无法删除的解决方法
- [LeetCode] Copy List with Random Pointer
- Leetcode: Reverse Linked List II
- 构造函数和析构函数
- Oracle DB 配置备份设置
- 08-python_流程控制-if
- 排序算法
- 【学习笔记】JavaScript(2013-10-05)
- nginx与php配置
- [JavaScript]functionexpression
- 创新的甘特图查看任务功能