给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
简要题解:
先算出头节点是链表中那个数字然后把链表拼接成一个循环链表后 找出找出头节点的位置 把尾节点接空指针即可主要代码如下;
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head==NULL||k==0) return head;
ListNode* cur=head;ListNode* tail=NULL;
int len=1; while(cur->next!=NULL)
{
cur=cur->next; len++;
}
int xu=len-(k%len); tail=cur;
cur->next=head;cur=head;
for(int i=0;i<xu;i++)
{
cur=cur->next;
tail=tail->next;
}
tail->next=NULL;
return cur;
}
};