您的位置:首页 > 编程语言 > Java开发

Java实现-重排链表

2017-06-08 22:35 169 查看


/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
public class Solution {
/**
* @param head: The head of linked list.
* @return: void
*/
public void reorderList(ListNode head) {
// write your code here
if(head==null){
return;
}
int count=1;
ListNode node1=head;
while(node1.next!=null){
node1=node1.next;
count++;
}
ListNode node=head;
ListNode result=head;
Queue<ListNode> q=new LinkedList<ListNode>();
Stack<ListNode> s=new Stack<ListNode>();
if(count%2==0){
int num=count/2;
while(num>0){
ListNode temp=node.next;
node.next=null;
q.add(node);
node=temp;
num--;
}
while(node!=null){
ListNode temp=node.next;
node.next=null;
s.push(node);
node=temp;

}
q.poll();
while(!s.isEmpty()){
ListNode temp=s.pop();
result.next=temp;
result=result.next;
if(!q.isEmpty()){
temp=q.poll();
result.next=temp;
result=result.next;
}else{
break;
}
}
}else{
int num=count/2+1;
while(num>0){
ListNode temp=node.next;
node.next=null;
q.add(node);
node=temp;
num--;
}
while(node!=null){
ListNode temp=node.next;
node.next=null;
s.push(node);
node=temp;

}
q.poll();
while(!s.isEmpty()){
ListNode temp=s.pop();
result.next=temp;
result=result.next;
if(!q.isEmpty()){
temp=q.poll();
result.next=temp;
result=result.next;
}
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LintCode重排链表