【LeetCode92】-反转链表II

实现思想

可以有将m和n之间的链表利用LeetCode206反转链表的思想进行反转,不同的在于反转后最后一位指向的为n+1节点,当处理完的这一小段返回的时候,令m-1处节点指向刚刚处理的那段的头部,在实现的过程中注意处理边界,如m等于1和n为最后一个元素等问题

实现代码:

提示:这里描述项目中遇到的问题:
例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:

class Solution {
    
    
public:
    ListNode * reverse(ListNode* head,ListNode* end,ListNode* ee){
    
    
        //boundary
        if(head==nullptr) return nullptr;
        ListNode *p,*p1,*p2;
        //init
        p=head;
        p1=head->next;
        p->next=ee;
        //main
        while(p1!=ee){
    
    
            p2=p1->next;
            p1->next=p;
            p=p1;
            p1=p2;
        }
        return p;
    }
    ListNode* reverseBetween(ListNode* head, int m, int n) {
    
    
        ListNode* begin,*end=nullptr,*t,*bb,*ee,*new_begin;
        t=head;
        int i=0;
        while(t){
    
    
            i++;
            if(i==m-1) bb=t;
            if(i==n) end=t;
            t=t->next;
        }
        ee=end->next;
        if(m==1) begin=head;
        else begin=bb->next;
        new_begin=reverse(begin,end,ee);
        if(m==1) return new_begin;
        else{
    
    
            bb->next=new_begin;
            return head;
        }
    }
};

提交结果及分析:

在这里插入图片描述
时间复杂度O(n)

另一种代码实现

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/112948264