Leetcode 链表的部分倒插逆置

题目描述

将一个链表m位置到n位置之间的区间反转,要求使用原地算法,并且在一次扫描之内完成反转。

例如:

给出的链表为1->2->3->4->5->NULL, m = 2 ,n = 4,

返回1->4->3->2->5->NULL.

注意:

给出的m,n满足以下条件:

1 ≤ m ≤ n ≤ 链表长度

 

基本思路:创建一个初始的辅助节点

通过pre_start start定位到相应的位置

然后从start往后的一个节点开始  依次前叉入 pre_start->next位置

注意点: 通过tmp 记录start->next位置  (即通过start->next来作为移动游标)

每次循环 :

  • tmp=start->next 
  • start->next=tmp->next       //start-next作为存储转移变量
  • tmp->next=pre->next        //易错点
  • pre->next=tmp
ListNode* reverseBetween(ListNode* head, int m, int n) {
        // write code here
        
        if(head==NULL)
            return NULL;
        if(m==n)
            return head;
        ListNode* null_node=new ListNode(0);
        null_node->next=head;
        ListNode* pre_start=null_node;
        ListNode* start=head;
        for(int i=1;inext;
            start=start->next;        //分别定为到开始位置和开始位置的前一个位置
            
        }
        for(int i=0;inext;//临时记录
            start->next=temp->next;
            temp->next=pre_start->next;
            pre_start->next=temp;
        }
        //循环结束后  需要修改  pre_start->next为新的start
        return null_node->next;

        
    }

 

你可能感兴趣的:(Leetcode)