【Leetcode】61. Rotate List

【题目】中文 英文

给定一个链表,旋转链表,将链表每个节点向右移动 个位置,其中 是非负数。

 1 /**
 2 * Definition for singly-linked list.
 3 * struct ListNode {
 4 *     int val;
 5 *     ListNode *next;
 6 *     ListNode(int x) : val(x), next(NULL) {}
 7 * };
 8 */
 9 class Solution
10 {
11 public:
12     ListNode * rotateRight(ListNode* head, int k)
13     {
14         ListNode *h1 = head;
15         int num = 1;
16         if (head != NULL)
17         {
18             while (h1->next != NULL)
19             {
20                 ++num;
21                 h1 = h1->next;
22             }
23             k = k % num;
24             if (k == num || k == 0)
25                 return head;
26             else if(k < num)
27                 return solute(num, head, k);
28         }
29         return head;
30     }
31     ListNode* solute(int num, ListNode* &head, int k)
32     {
33         ListNode *p = head, *h;
34         int num1 = num;
35         while (p->next != NULL)
36         {
37             if (num1 == k + 1)
38                 h = p;
39             --num1;
40             p = p->next;
41         }
42         p->next = head;
43         head = h->next;
44         h->next = NULL;
45         return head;
46     }
47 };

猜你喜欢

转载自www.cnblogs.com/sunbines/p/9135879.html