算法总结之 按照左右半区的方式重新组合单链表


把链表右边的 拿过来以此插入到左边的链表

 

思路:

 如果链表长度为N,直接给出时间复杂度为O(N) 额外空间复杂度为O(1)的方法

 

1 如果链表为空,或者长度为1 不调整

2 链表长度大于1时, 遍历一便找到左半区最后一个节点 记为mid

package TT;

public class Test115 {

public class Node{
public int value;
public Node next;

public Node(int data){
this.value=data;
}

}

public void relocate(Node head){

if(head==null || head.next==null){

return;

}
Node mid = head;
Node right = head.next;
while(right.next!=null && right.next.next !=null){
mid=mid.next;
right=right.next.next;
}
right=mid.next;
mid.next=null;
mergeLR(head, right);
}

public void mergeLR(Node left, Node right){
Node next = null;
while(left.next!=null){
next=right.next;
right.next=left.next;
left.next=right;
left=right.next;
right=next;
}
left.next=right;
}



}

  


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: