给你一个链表的头节点 head
,旋转链表,将链表每个节点向右移动 k
个位置。
解题思路:(传统的思维模式aaaa(笨办法))根据旋转k值,拆分和拼接链表的结果:
struct ListNode* rotateRight(struct ListNode* head, int k){
int listlen=0;
int listep=0;
struct ListNode *listail;
struct ListNode *nodestep;
nodestep=head;
if(!head)
return NULL;
if(k==0)
return head;
while(nodestep)
{
listlen++;
listail=nodestep;
nodestep=nodestep->next;
}
k=k%listlen;
nodestep=head;
while(nodestep)
{
listep++;
if(listep==(listlen-k))
{
listail->next=head;
head=nodestep->next;
nodestep->next=NULL;
return head;
}
nodestep=nodestep->next;
}
return NULL;
}