Reverse Linked List II

来源:互联网 发布:阿儿法营创意编程网址 编辑:程序博客网 时间:2024/06/03 11: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->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.

不是很难,需要细心。

注意记下m-1, m, n, n+1 这四个点。中间反转的时候记录prev,cur,next这三个指针。

ListNode *reverseBetween(ListNode *head, int m, int n){    ListNode *before_m= NULL;    ListNode *cur = head;    for (int i = 1; i < m; i++)    {        before_m = cur;        cur = cur->next;    }    ListNode *m_node = cur;    ListNode *prev = cur, *next= NULL;    for (int i = m; i <= n; i++)    {        next = cur->next;        cur->next = prev;        prev = cur;        cur = next;    }    if(before_m != NULL)         before_m->next = prev;    else        head = prev;    m_node -> next = next;    return head;}



0 0
原创粉丝点击