实现思想
可以有将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)