Java 求解K 个一组翻转链表
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解K 个一组翻转链表相关的知识,希望对你有一定的参考价值。
一、题目
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 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) {
// 翻转,删除,都要设置虚拟头结点
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
//记录每次操作的起始节点
ListNode beginNode = dummyHead;
//记录每次操作的结束节点
ListNode endNode = dummyHead;
ListNode nextNode, preNode;
while (endNode.next != null) {
//判断后续的节点是否还有k个
for (int i = 0; i < k && endNode != null; i++) {
endNode = endNode.next;
}
if (endNode == null) {
break;
}
preNode = beginNode.next;
nextNode = endNode.next;
endNode.next = null;
//开始翻转这一组
beginNode.next = reverse(preNode);
preNode.next = nextNode;
beginNode = preNode;
endNode = preNode;
}
return dummyHead.next;
}
public ListNode reverse(ListNode head) {
ListNode curNode = head;
ListNode tempNode, preNode=null;
while (curNode != null) {
tempNode = curNode.next;
curNode.next = preNode;
preNode = curNode;
curNode = tempNode;
}
return preNode;
}
}
以上是关于Java 求解K 个一组翻转链表的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—25. K 个一组翻转链表