LeetCode Reverse Nodes in k-Group

来源:互联网 发布:域名查ip 编辑:程序博客网 时间:2024/06/10 02:41

这题好像是美团的一道笔试题,当初记得一种好的方法使用栈,但是这要复制元素,本题有了限制;之后我花了两个小时想找递归的算法,后来还是没找到,下面的是最普通的那种做法,也是调了一阵子才弄出来的。

void reverse(ListNode **s,ListNode**e){ListNode *p=*s,*q=NULL,*r=NULL;(*e)->next = NULL;//this is very importantif (*s==*e)return ;if(p)q = p->next;if (q&&q!=*e)r = q->next;q->next = p;p =q;q = r;while(q){if(r)//&&r!=*e{r =r->next;//q = r;}//else//q = NULL;q->next = p;p = q;q = r;}(*s)->next = NULL;}ListNode *reverseKGroup(ListNode *head, int k) {if(head==NULL||head->next==NULL||k<=1)return head;ListNode *s1=head,*e1=NULL;ListNode *rethead=NULL,*p=NULL,*q=head;while(q){s1 = q;int i;for (i=0;i<k&&q;i++){e1 = q;q = q->next;}if (i!=k&&q==NULL&&rethead==NULL){return head;}if (q==NULL&&i<k)//add this means when remaining nodes less than k do not converse{p->next = s1;p = e1;break;//return rethead;}reverse(&s1,&e1);if (rethead==NULL){rethead = e1;p = s1;}else{p->next = e1;p = s1;}}if(p)p->next = NULL;return rethead;}


0 0
原创粉丝点击