链表的应用
乍一看这道题很麻烦,不过当我们仔细观察后可以发现,不论 k 取何值,旋转的次数实际为 k % len ,len 为链表的长度。因此这道题的任务就是找到倒数第 k 个数据,使倒数第 k-1 个数据的next 指向 NULL,最后使链表最后一个数据的next指向head。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight(struct ListNode* head, int k){
if(head == NULL || head->next == NULL || k == 0){
return head;
}
struct ListNode *p = head, *end = head, *ans = head;
int len = 0, n = 0;
while(p){
len++;
end = p;
p = p->next;
}
p = head;
k %= len;
n = len - k;
if(k == 0){
return head;
}
for(int i = 0;i < n-1; i++){
p = p->next;
}
ans = p->next;
p->next = NULL;
end->next = head;
return ans;
}
本文深入探讨了链表旋转算法的实现细节,通过分析链表的长度与旋转次数的关系,提出了一个高效的算法解决方案。该算法能够准确地找到倒数第k个节点,并调整链表的连接,以完成旋转操作。
1316

被折叠的 条评论
为什么被折叠?



