[leetcode][list][two pointers] Reverse Linked List II
2015-05-20 09:10
274 查看
题目:
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given
return
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
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: //m == 1时head会变 ListNode* reverseBetween(ListNode* head, int m, int n) { if(NULL == head || NULL == head->next || m == n) return head; ListNode *p = head;//用于遍历链表 ListNode *pre = NULL;//指向当前链表的前一个 int i = 1;//节点个数计数器 while(i < m && p){//找到需要翻转的第一个节点 pre = p; p = p->next; ++i; } ListNode *first = reverse(p, n-m+1);//返回翻转后的第一节点 if(pre) pre->next = first;//将翻转后的链表连入原链表 else head = first;//m == 1时pre == NULL return head; } private: ListNode *reverse(ListNode *head, int len){//翻转从head开始的len个节点 if(NULL == head || NULL == head->next) return head; ListNode *pFirst = head;//新链表的第一个节点,维护它一是为了将节点连入新链表,二是为了返回新链表 ListNode *p = head->next;//当前节点,用于遍历链表 while(--len && p){ ListNode *pNext = p->next; p->next = pFirst; pFirst = p; p = pNext; } head->next = p;//现在head是新链表的最后一个节点,它的next是原链表最后一个节点的next return pFirst; } };
相关文章推荐
- [leetcode][list][two pointers] Linked List Cycle II
- LeetCode之Reverse Linked List II
- 个人记录-LeetCode 92. Reverse Linked List II
- [LeetCode] Reverse Linked List II
- LeetCode 092 Reverse Linked List II
- [C++]LeetCode: 62 Reverse Linked List II
- Reverse Linked List II - LeetCode
- Reverse Linked List II——LeetCode
- 64_leetcode_reverse Linked List II
- LeetCode Reverse Linked List II
- LeetCode--reverse-linked-list-ii
- leetcode 刷题之路 67 Reverse Linked List II
- 开始刷leetcode day18:Reverse Linked List II
- 【LeetCode】92. Reverse Linked List II
- leetcode:92. Reverse Linked List II(Java)解答
- Reverse Linked List II - LeetCode 92
- [LeetCode] Reverse Linked List II 解题报告
- Leetcode 92. Reverse Linked List II
- leetcode — reverse-linked-list-ii
- leetcode92. Reverse Linked List II