首页 > 其他 > 详细

61. 旋转链表

时间:2020-12-25 21:21:32      阅读:31      评论:0      收藏:0      [点我收藏+]

题目:

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

示例 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

代码1:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode rotateRight(ListNode head, int k) {
13            //特殊情况特殊处理
14            if(head==null){return null;}
15            if(head.next==null){return head;}
16            
17            ListNode p=head;     //当链表长度大于k时,指向旧链表尾节点,当链表长度小于k时,指向新链表尾节点
18            ListNode pre=head;   //当链表长度大于k时,新链表尾节点
19            ListNode tail=null;   //指向旧链表尾节点
20            int t=0;
21            while(p.next!=null){
22                p=p.next;
23                ++t;
24                if(p.next==null){tail=p;} //tail始终指向为节点
25                if(t>k){  //k小于链表长度
26                  pre=pre.next;
27                }else if(p.next==null&&t==k){break;}
28                 else{  //k比链表长度大
29                    if(p.next==null){
30                        p=head;
31                        ++t;
32                        if(t==k){
33                            return head;
34                        }
35                    }
36                 
37                }
38            }
39           if(p.next==null){  //k小于链表长度情况
40            p.next=head;
41            head=pre.next;
42            pre.next=null;
43            }
44            else{//k大于链表长度情况
45                 tail.next=head;
46                 head=p.next;
47                 p.next=null;
48            }
49         return head;
50     }
51 }

技术分享图片

 

 

 

代码2:

61. 旋转链表

原文:https://www.cnblogs.com/SEU-ZCY/p/14190726.html

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