-
实例要求:
-
1、给定一个
链表的头节点 head
,请你旋转链表
,将链表每个节点
向右移动 k 个位置
; -
2、链表中
节点的数目的范围为[0, 500]
; -
实例分析:
-
1、入参合理性检查,即
head != NULL || head->next != NULL || k != 0
; -
2、
while循环
找到链表的最后一个节点
; -
3、
单向链表首尾相连
,形成单向循环链表,即tail->next = head
; -
4、每个元素向右移动完成后,
单向循环链表恢复为单向链表
即可; -
相关案例:
-
示例代码:
/*** 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 *tail = head;int len = 1;//找到链表的最后一个节点while(tail->next != NULL){len++;tail = tail->next;}//首尾相连,形成循环链表int i = len - k%len;tail->next = head;while(i--){tail = tail->next;}head = tail->next;tail->next = NULL;return head;}
- 运行结果: