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:

2->0->1->NULL
0->1->2->NULL
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 @   堤苏白  阅读(91)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示