99 - 重排链表

2017.10.23

首先遍历链表,建立两个队列,一个存放前一半一个存放后一半。

然后再遍历这两个队列,建立新的连接关系,重排链表。

/**
 * 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){
		if(head == null || head.next == null){
			return ;
		}
		LinkedList<ListNode> queue1 = new LinkedList<ListNode>();
		LinkedList<ListNode> queue2 = new LinkedList<ListNode>();
		//所有的节点均先入栈
		while(head != null){
			queue1.addFirst(head);
			head = head.next;
		}
		int i = queue1.size()/2;
		while(i > 0){
			queue2.addLast(queue1.pollFirst());
			i--;
		}
		head = queue1.pollLast();
		head.next = null;
		ListNode bt = head;
		while(!queue1.isEmpty()){
			queue2.peekFirst().next = queue1.peekLast();
			queue1.peekLast().next = bt.next;
			bt.next = queue2.pollFirst();
			bt = queue1.pollLast();
		}
		while(!queue2.isEmpty()){
			queue2.peekFirst().next = bt.next;
			bt.next = queue2.pollFirst();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值