0
点赞
收藏
分享

微信扫一扫

【链表】链表的节点每k个一组翻转

Just_Esme 2022-04-19 阅读 56
算法

【链表】牛客网:链表内指定区间反转_暮色_年华的博客-CSDN博客 

思路:

创建一个dummyNode虚拟节点和尾结点,分len/k组,每组进行翻转后用尾插法插入dummyNode链表。

字符串翻转:

   private void reverseLinkedList(ListNode head){
         ListNode dummyNode=new ListNode(-1);
        ListNode p=head;
        while(p!=null){
            ListNode q=p.next;
            p.next=dummyNode.next;
            dummyNode.next=p;
            p=q;
        }
        dummyNode.next=null;
        
    }

 注意:如果翻转的只是链表的局部,需要用额外的指针记录子链表的pre和next节点。

 

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
     public ListNode reverseKGroup(ListNode head,int k){
         if(k<=1)return head;
         if(head==null)return head;
         ListNode node=head;
         int len=length(head);
         ListNode dummyNode=new ListNode(0);
         ListNode tail=dummyNode;
         int n=len/k;
         ListNode left=head;
         ListNode right=head;
         ListNode right_next=head;//必须初始化为head
         for(int i=0;i<n;i++){
             for(int j=0;j<k-1;j++){
                 right=right.next;
             }
             right_next=right.next;
             right.next=null;
             reverseLinkedList(left);
             tail.next=right;
             tail=left;
             left=right=right_next;
         }
         tail.next=right_next;
         return dummyNode.next;
         
         
}
public int length(ListNode head){
    int cnt=0;
    if(head!=null)cnt=1;
    while(head.next!=null){
        cnt++;
        head=head.next;
    }
    return cnt;

}
   private void reverseLinkedList(ListNode head){
         ListNode dummyNode=new ListNode(-1);
        ListNode p=head;
        while(p!=null){
            ListNode q=p.next;
            p.next=dummyNode.next;
            dummyNode.next=p;
            p=q;
        }
        dummyNode.next=null;
        
    }
}
举报

相关推荐

0 条评论