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;
}
}
}
}
}
相关文章推荐
- 使用JAVA实现双向链表
- JAVA实现双向链表
- 利用链表实现队列的Java代码
- Java实现链表
- Java实现链表
- Java语言中链表和双向链表的实现
- Java数据结构之简单链表的定义与实现方法示例
- JAVA实现链表
- java 单向链表的实现
- java链表实现约瑟夫算法
- Java 实现 链表
- Java语言中链表和双向链表的实现
- JAVA 语言中链表和双向链表的实现
- 某一天的思考题(使用Java实现链表)的参考答案
- JAVA实现双向链表
- java 语言中链表和双向链表的实现!
- Java语言中链表和双向链表的实现-Java基础-Java-编程开发
- Java 用单链表实现多项式加减乘
- 用java数组实现基本链表和可自扩充的链表
- Java数据结构之双端链表原理与实现方法