[LeetCode]Reverse Linked List II

来源:互联网 发布:张继科 极速前进 知乎 编辑:程序博客网 时间:2024/06/06 14:12

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->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

分析:记录链表的开始和结束位置即可。比n个链表中反转k个要简单。
/** * 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 *pre = new ListNode(-1);        pre->next = head;        ListNode *ret = pre;        ListNode *cur = head;        ListNode *nex = head;        int t=n-m;        while(m>1){            pre=pre->next;            cur=cur->next;            --m;        }            nex = cur->next;        while(t>0){            cur->next = nex->next;            nex->next = pre->next;            pre->next = nex;            nex = cur->next;            --t;        }        return ret->next;            }};


0 0
原创粉丝点击