开始之前先给自己打个鸡血吧:
A journey of a thousand miles begins with a single step. 千里之行始于足下。
题源:https://leetcode.cn/problems/rotate-list/
题目详情:
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
思路
待补充······
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight(struct ListNode* head, int k){
if(k==0||head==NULL||head->next==NULL) return head;
else{
//链表长度
int len=0;
struct ListNode* p=head->next;
struct ListNode *l=head;
struct ListNode *q=head;
while(p){
len++;
p=p->next;
//q为尾结点
q=q->next;
}
//当操作次数大于链表长度时取余
k=k%(len+1);
//找到旋转之后应该为第一个节点的前一个节点l
for(int i=0;i<len-k;i++){
l=l->next;
}
q->next=head;
//头指针指向旋转之后的第一个节点
head=l->next;
//断开
l->next=NULL;
return head;
}
}