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

2022-07-26 23:18:20 字數 819 閱讀 4597

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

【解題思路】

1. 鍊錶為空或者長度為1 ,則不需要進行任何調整

2. 利用乙個快指標和乙個慢指標,找到右側的起始點,將其斷開,分成兩個鍊錶

3. 然後兩個鍊錶按照約定的順序進行重新組合

package

com.test;

import

com.test.listnode;

/*** created by demrystv. */

public

class

reformbyleftandright

listnode mid =head;

listnode right =head.next;

while (right.next != null || right.next.next != null

) right =mid.next;

mid.next = null

; merge(head, right);

}public

void

merge(listnode left, listnode 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...