来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1.TITLE
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.
- Example:
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
- Note:
Only constant extra memory is allowed.
You may not alter the values in the list's nodes, only nodes itself may be changed.
2. JAVA PROGRAM
Time Complexity:O(N),Space Complexity:O(1)/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
if(head == null || k==0){
return head;
}
ListNode first = head;
ListNode last = null,flag = first;
for(int i=0;i<k;i++){
if(flag == null){
return head;
}
last = flag;
flag = flag.next;
}
last.next = null;
head = reverseList(head);
first.next = reverseKGroup(flag,k);
return head;
}
public ListNode reverseList(ListNode list){
if(list==null || list.next==null){
return list;
}
ListNode preNode = null,afterNode = null,curentNode = null;
curentNode = list.next;
preNode = list;
while(curentNode!=null){
afterNode = curentNode.next;
curentNode.next = preNode;
preNode = curentNode;
curentNode = afterNode;
}
return preNode;
}
}
网友评论