首页 > 其他 > 详细

61. 旋转链表

时间:2020-03-20 12:11:23      阅读:48      评论:0      收藏:0      [点我收藏+]
 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         //k为非负数,即0和正数
15         //如果k为0或者head为空,则直接返回head
16         if(k == 0 || head == NULL) return head;
17         int len = 0;
18         ListNode *p = head;
19         while(p) len++,p = p->next;//求链表的长度
20 
21         k %= len;//求模
22         if(k == 0) return head;//如果这个模值为0,则直接返回head
23         
24         ListNode* dummy = new ListNode(-1);//建立一个虚拟节点
25         dummy->next = head;
26 
27         ListNode* p1 = dummy;
28         ListNode* p2 = head;
29         int step = len - k;
30         while(step-- && p1 && p2) p1 = p1->next,p2 = p2->next;
31 
32         ListNode* p3 = head;
33         while(p3->next) p3 = p3->next;
34 
35         p3->next = head,p1->next = NULL;//连接旋转链表
36         return p2;
37     }
38 };

 

61. 旋转链表

原文:https://www.cnblogs.com/yuhong1103/p/12530081.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!