[LeetCode][Java]Reverse Nodes in k-Group
12054 ワード
質問する
Given a linked list, reverse the nodes of a linked list k
at a time and return its modified list.k
is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes, in the end, should remain as it is.
You may not alter the values in the list's nodes, only nodes themselves may be changed.
せいげんじょうけん
に近づく
リンクリストと整数k
を返すとk
セットのリンクリストに反転する問題.
キーは、リンクリストのポインタをどのように管理するかです.
私なら.
next
に逆結果リンクリストnext
で次のグループの最初のリンクドロップダウンこの方式が展開された
結果は安定した.
答案用紙
/**
* 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) {
if(null == head || null == head.next || k == 1)
return head;
ListNode lastNode = head;
ListNode nextPeriodNode = getNode(head, k + 1);
ListNode ret = getReversedNode(head, k);
lastNode.next = nextPeriodNode;
ListNode curNode = nextPeriodNode;
while(null != curNode){
ListNode prevNode = lastNode;
lastNode = curNode;
nextPeriodNode = getNode(curNode, k + 1);
ListNode reversedNode = getReversedNode(curNode, k);
if(null == reversedNode)
break;
prevNode.next = reversedNode;
lastNode.next = nextPeriodNode;
curNode = nextPeriodNode;
}
return ret;
}
/**
*
* @param head
* @return reverse 이후 첫번째 노드
*/
ListNode getReversedNode(ListNode head, int k){
if(null == head)
return null;
if(1 == k)
return head;
ListNode curNode = head;
for(int i = 1; i <= k; ++i){
if(null == curNode)
return null;
curNode = curNode.next;
}
ListNode prevNode = null;
curNode = head;
ListNode nextNode = null;
for(int i = 1; i <= k ; ++i){
nextNode = curNode.next;
curNode.next = prevNode;
prevNode = curNode;
curNode = nextNode;
}
head.next = null;
return prevNode;
}
ListNode getNode(ListNode head, int k){
if(null == head)
return null;
ListNode node = head;
for(int i = 1; i < k; ++i){
if(null == node)
return null;
node = node.next;
}
return node;
}
}
Reference
この問題について([LeetCode][Java]Reverse Nodes in k-Group), 我々は、より多くの情報をここで見つけました https://velog.io/@redgem92/LeetCodeJavaReverse-Nodes-in-k-Groupテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol