6.<tag-链表和反转链表>lt.25- K 个一组翻转链表
lt.25- K 个一组翻转链表
[案例需求]

[思路分析]
- 参考题解: 点我
- 待总结
[代码实现]
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
//链表的反转方法:
/**
1. 修改了结点: 遍历链表的值放入list, 取出重新连接;
2. 不修改链表: 遍历链表, 头插法;
3. 不修改链表: 递归(还不会呢)
*/
// post遍历链表, 到达链表尾部就结束;
// 对post遍历次数进行计数 count, count==k时, 进入反转流程;
// pre记录每个反转区间的前一个结点;
// 对pre和post之间的链表结点进行反转;
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
ListNode tail = dummy;
while(true){
int count = 0;
while(tail != null && count != k){
++count;
tail = tail.next;
}
if(tail == null)break;
ListNode head1 = pre.next;
while(pre.next != tail){
ListNode cur = pre.next;
pre.next = cur.next;
cur.next = tail.next;
tail.next = cur;
}
pre = head1;
tail = head1;
}
return dummy.next;
}
}

浙公网安备 33010602011771号