LeetCode 61.Rotate List (旋转链表) ╰半橙微兮° 2022-05-10 05:28 146阅读 0赞 题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 *k* 个位置,其中 *k* 是非负数。 **示例 1:** 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL **示例 2:** 输入: 0->1->2->NULL, k = 4 输出: 2->0->1->NULL 解释: 向右旋转 1 步: 2->0->1->NULL 向右旋转 2 步: 1->2->0->NULL 向右旋转 3 步: 0->1->2->NULL 向右旋转 4 步: 2->0->1->NULL `AC C++ Solution:` /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* rotateRight(ListNode* head, int k) { if(!head) return head; int len = 1; //number of nodes ListNode *newH, *tail; newH = tail = head; while(tail->next) //get the number of nodes in the list { tail = tail->next; len++; } tail->next = head; //circle the link if(k %= len) { for(auto i = 0; i < len-k; i++) tail=tail->next; //the tail node is the (len-k)-th node } newH = tail->next; tail->next = NULL; return newH; } };
还没有评论,来说两句吧...