一、题目
单链表L:L0L1…Ln-1Ln,如果将其重新排列,则为L0LnL1Ln-1L2Ln-2…
二、思路
1)使用快速指针找到中间点,将链表分成两部分,然后反转第二个链表,将两个链表连接在一起2 )使用两端队列
三、代码
1)公共节点头) {
监听器=头;
if (头==空| |头.下一个==空) {
返回;
}
listnode slow=头;
列表节点快速=头;
wile (快速!=空的快速.下一个!=空值) {
慢=慢.下一个;
fast=fast.next.next;
}
监听器反转=慢速.下一个;
slow.next=空;
listnode pre=空;
监听器=反转;
威尔(Cur!=空值) {
ListNode next=cur.next;
cur.next=预先;
pre=cur;
cur=下一个;
}
反转=预;
listnode cur1=头;
监听器2=反转;
wile(cur1!=空Cur 2!=空值) {
列表节点下一个1=cur1.下一个;
列表节点下一个2=cur2.下一个;
cur2.next=next1;
cur1.next=cur2;
cur1=下一个1;
cur2=下一个2;
}
}
2 )
公共节点头) {
linkedlistlistnodequeue=新链接列表(;
监听器=头部;
威尔(Cur!=空值) {
队列最后(cur;
cur=cur.next;
}
while (! 队列. isempty () )
if (cur==空值) {
cur=queue.pollFirst (;
} else {
cur.next=queue.pollFirst (;
cur=cur.next;
}
cur.next=queue.pollLast (;
cur=cur.next;
}
红外线!=空值) {
cur.next=空值;
}
}