鍊錶問題20 按照左右半區的方式重新組合單鏈表

2021-10-02 08:22:44 字數 752 閱讀 7757

給定乙個單鏈表的頭部節點head,鍊錶長度為n,如果n為偶數,那麼前n/2個節點算作左半區,後n/2個節點算作右半區;如果n為奇數,那麼前n/2個節點算作左半區,後n/2+1個節點算作右半區。左半區從左到右依次為l1->l2->l3->...., 右半區從左到右依次記為r1->r2->..., 請將單鏈表調整成l1->r1->l2->r2->... 的形式

如果鍊錶長度為空或者長度為1,不用調整,直接結束

若長度大於1,遍歷一遍找到左半區的最後乙個節點,記為mid。例如:1->2 mid:1; 1->2->3 mid:1; 1->2->3->4 mid:2

找到mid後,就可以將鍊錶分為左右半區兩個鍊錶(mid.next=null),分別記為left(head)和right(原來的mid.next)

合併兩個鍊錶

public static class node

}public void relocate(node head)

node mid=head;

node right=head.next;

while(right.next!=null&&right.next.next!=null)

right=mid.next;

mid.next=null;

mergelr(head,right)

}public void mergelr(node left,node right)

left.next=right;

}

按照左右半區的方式重新組合單鏈表

題目 給定乙個單鏈表的頭部節點head,鍊錶長度為n 如果n為偶數,那麼前n 2個節點算作左半區,後n 2個節點算作右半區 如果n為奇數,那麼前n 2個節點算作左半區,後n 2 1個節點算作右半區。左半區從左到右依次記為l1 l2 右半區從左到右依次記為r1 r2 請將單鏈表調整成l1 r1 l2 ...

演算法題 按照左右半區的方式重新組合單鏈表

程式設計題 按照左右半區的方式重新組合單鏈表 時間限制 1秒 空間限制 32768k 給定乙個單鏈表的頭部節點head,鍊錶長度為n。如果n為偶數,那麼前n 2個節點算作左半區,後n 2個節點算作右半區 如果n為奇數,那麼前n 2個節點算作左半區,後n 2 1個節點算作右半區 左半區從左到右依次記為...

演算法總結之 按照左右半區的方式重新組合單鏈表

把鍊錶右邊的 拿過來以此插入到左邊的鍊錶 思路 如果鍊錶長度為n,直接給出時間複雜度為o n 額外空間複雜度為o 1 的方法 1 如果鍊錶為空,或者長度為1 不調整 2 鍊錶長度大於1時,遍歷一便找到左半區最後乙個節點 記為mid package tt public class test115 pu...