Reverse Linked List II

题目描述

Reverse a linked list from position m to n. Do it in one-pass.

Note: 1 ≤ m ≤ n ≤ length of list.

Example:

Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL

core code

      prev->next=cur->next;
            cur->next=head2->next;
            head2->next=cur;
            cur=prev->next;

这个地方比较绕,可以画图理解下,三个一组,画一下链表的方向

class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        ListNode dummy(-1);
        dummy.next=head;
        ListNode *prev=&dummy;
        for(int i=0;i<m-1;++i){
            prev=prev->next;
        }
        ListNode* const head2=prev;
        prev=head2->next;
        ListNode *cur=prev->next;
        for(int i=m;i<n;++i){
//实现元素的反转,同时在改变指针的方向时,同时将head-next指向最后一个元素,m后面的元素指向head ->next,在链表换向的同时将局部的元素的开始跟最后的元素的下一个指向进行指定
            prev->next=cur->next;
            cur->next=head2->next;
            head2->next=cur;
            cur=prev->next;
        }
        return dummy.next;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容