题目描述
解题方法1
- 先找到左半区和右边区的第一个节点,将左右半区看做两个链表。
- 然后分别从两个链表中取出首节点连接到新链表末尾,直到左右半区均为空。
public class Test {
public static void main(String[] args) throws Exception {
int[] arr = {1,2,3,7,8,9,10};
Node head = create(arr);
fun(head);
for(Node p=head.next;p!=null;p=p.next){
System.out.print(p.val + " ");
}
}
public static Node fun(Node head){
int len=0;
for(Node p=head.next;p!=null;p=p.next){
len++;
}
if(len<=3){
return head;
}
int num = (int) Math.floor(len/2.0) + 1;
Node left=head.next;
Node leftend = null;
Node right = null;
for(Node p=head.next;p!=null;p=p.next){
if(num==1){
right = p;
}
num--;
}
leftend = right;
Node last = head;
head.next = null;
while(left!=leftend || right!=null){
System.out.println(left.val);
System.out.println(right.val);
if(left!=leftend){
Node temp = left.next;
left.next = last.next;
last.next = left;
last = left;
left = temp;
}
if(right!=null){
Node temp = right.next;
right.next = last.next;
last.next = right;
last = right;
right = temp;
}
}
return head;
}
public static Node create(int[] arr){
Node head = new Node(0);
Node newnode = null;
Node lastnode = head;
for(int a:arr){
newnode = new Node(a);
newnode.next = lastnode.next;
lastnode.next = newnode;
lastnode = newnode;
}
return head;
}
}
class Node{
int val;
Node next;
Node(int val){
this.val = val;
}
}