zoukankan      html  css  js  c++  java
  • [leetcode] Reverse Linked List II

    Reverse Linked List II

    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.

    思路:

    一般链表反向的题目都是从前到后逐一反向,这个也不例外。bfore指向m的前一个节点(如果m=1,before=NULL)。start就是第m个节点,也就是开始反向的节点。end与after节点逐渐向后变化,end是after前面的那个节点,将after的next指向end。这两个节点的关系靠p来过渡。

    题解:

    /**
     * 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(m==n)
                return head;
            ListNode *p = head;
            ListNode *before, *start, *end, *after;
            before=start=end=after=NULL;
            for(int i=1;i<m;i++) {
                before = p;
                p = p->next;
            }
            start=end=p;
            p = p->next;
            for(int i=m;i<n;i++) {
                after = p->next;
                p->next = end;
                end = p;
                p = after;
            }
            start->next = after;
            if(before!=NULL)
                before->next = end;
            else
                head = end;
            return head;
        }
    };
    View Code
  • 相关阅读:
    团队开发5
    团队开发4
    团队开发3
    团队开发2
    团队开发1
    团队计划会议
    寒假学习进度---完结篇
    寒假学习进度十七
    寒假学习进度十六
    python后续学习
  • 原文地址:https://www.cnblogs.com/jiasaidongqi/p/4223358.html
Copyright © 2011-2022 走看看