赞
踩
struct ListNode* rotateRight(struct ListNode* head, int k){ struct ListNode* fast=head,*slow=head,*temp=head; if(!head) return head; int count=1; while(temp->next) { temp=temp->next; count++; } k%=count; if(k==0) return head; k++; while(k--) fast=fast->next; while(fast) { fast=fast->next; slow=slow->next; } struct ListNode* Head=slow->next; slow->next=NULL; temp->next=head; return Head; }
思路:将旋转问题转化为将链表倒数k个节点作为链表的新表头
时间复杂度为O(n),空间复杂度为O(1)
struct ListNode* rotateRight(struct ListNode* head, int k){ struct ListNode *temp=head,*p=head; if(!head) return head; int count=1; while(temp->next) { temp=temp->next; count++; } k%=count; if(k==0) return head; temp->next=head; count-=k; while(--count) p=p->next; temp=p->next; p->next=NULL; return temp; }
另一种思路:先把链表连接成环,再确定新的表头,这种方法少了一个while循环
但是不知道为什么,第二种方法执行用时更多,按理来说应该更快
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。