61. 旋转链表

题目:

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

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

思路:采用暴力法,并在此基础上根据t(可以看成计数器,判断是否走到尾时与k的关系)与k的关系,分成三种情况讨论

 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:

posted @ 2020-12-25 20:43  堤苏白  阅读(95)  评论(0)    收藏  举报