- Rotate List:题目链接
AC code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
struct ListNode* rotateRight(struct ListNode* head, int k){
if (head == NULL) {
return head;
}
struct ListNode* dummyHead = (struct ListNode*) malloc (sizeof(struct ListNode));
dummyHead->next = head;
struct ListNode* tail = dummyHead; // 表尾
int len = 0; // 表长
// 求表长
while (tail->next != NULL) {
tail = tail->next;
len++;
}
// 找到倒数第k个元素的前驱 跟删除倒数第K元素的思想一样
int i = 0;
struct ListNode* p = dummyHead;
int idx = len-(k%len); // 前驱所在位置
while (p->next != NULL && i < idx) {
p = p->next;
i++;
}
if (p->next == NULL) { // 此时 newHead: NUL
return head;
}
struct ListNode* newHead = p->next; // newHead: 4->5
p->next = NULL; // dummy->1->2->3 此时p指向3 将3的指针域置为NULL 作为表尾
tail->next = head; // 将1->2-3挂到4->5的后面 newHead:4->5->1->2->3
return newHead;
}