算法总结之 按照左右半区的方式重新组合单链表
把链表右边的 拿过来以此插入到左边的链表
思路:
如果链表长度为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;
}
}