Leecode题知识点(25,61,82)

第25题:K 个一组翻转链表
主体函数
举例:1>2>3>4>5 k=3
ListNode end=prev; for(int i=0;i<k&&end!=null;i++){ end=end.next; }
先让end和prev相等
然后遍历,让end往下走
if(end==null)break;
end到头了,就断开
ListNode nextgroup=end.next;
给断开后的起名叫nextgroup
ListNode start=prev.next; end.next=null;//把划分好的单独切了出来 prev.next = reverse(start);
翻转以K为准划分好的那段

start.next = nextgroup;

翻转前的 start = 1,现在变成了这一组的尾巴。让它指向下一组的开头

prev = start;

现在这一组已经翻转完成,prev 要移动到这一组的尾巴,作为下一组翻转时的「前置节点」。
翻转逻辑:
举例:1>2>3>4
prev=null ,curr=head(1)
while(curr!=null){
ListNode next=curr.next(next=2) //断开,保存后面的节点
curr.next=prev; //改变指针的方向
现在:
1>null
2>3>4>null //断开后的结果
prev=curr; //prev前进。prev=1
curr=next;//curr前进。curr=2
接着进行第二次循环
ListNode next=curr.next(next=3)
curr.next=prev; //curr=2,让curr.next=1(2>1)
现在:
2>1>null;
3>4null;
prev=curr; //prev前进。prev=2
curr=next;//curr前进。curr=3
第三次循环
ListNode next=curr.next(next=4)
curr.next=prev; //curr.next=2
现在:
3>2>1>null
4>null
prev=curr; 3
curr=next; 4
第四次循环
ListNode next=curr.next;
curr.next=prev;
现在:
4>3>2>1>null
不满足循环条件curr!=null,退出循环
第61题:旋转链表
1.计算链表长度
遍历链表,得到长度为n
注意:如果k>=n,其实就是k%n次旋转

2. 找到新头和新尾

新尾节点应该是 第 (n - k) 个节点
新头节点就是新尾的下一个节点。
例子:
n = 5, k = 2
新尾 = 第 5-2=3 个节点(值是 3)
新头 = 3.next = 4

3. 改指针

先断开在新尾的位置。
把原来的尾巴(值 5)指向原来的头(值 1),形成一个环。
1 → 2 → 3 → 4 → 5
↑ ↓ ------------> 4 → 5 → 1 → 2 → 3
└───────────┘
这里4也会被5带过去,因为4的next指向是5

k % n 的性质

如果 k < n 那么 k % n = k,等于什么都没做。

如果 k >= n 那么 k % n 会自动把它缩小到 [0, n-1] 的范围内。
所以 k = k % n; 一行代码,就已经同时处理了 k < n 和 k >= n 两种情况。


举例

假设 n = 5:
k = 2 → k % n = 2

k = 5 → k % n = 0(旋转一整圈,不需要动)

k = 12 → k % n = 2

k = 0 → k % n = 0
可以看到,取模运算天然就包含了 if (k >= n) 的逻辑
第82题:删除排序链表中的重复元素||
while(curr!=null){ boolean duplicate=false;
假设没有重复,如果有重复为true
if (duplicate) {
// duplicate 是 true 执行这里
} else {
// duplicate 是 false 执行这里
}

相关推荐
草履虫建模20 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq1 天前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq1 天前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
爱吃rabbit的mq1 天前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
(❁´◡`❁)Jimmy(❁´◡`❁)1 天前
Exgcd 学习笔记
笔记·学习·算法
YYuCChi1 天前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
不能隔夜的咖喱1 天前
牛客网刷题(2)
java·开发语言·算法
VT.馒头1 天前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
进击的小头1 天前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机
咖丨喱1 天前
IP校验和算法解析与实现
网络·tcp/ip·算法