Reorder List 鍊錶重排序

2021-07-25 04:04:55 字數 1214 閱讀 9084

given a singly linked list l: l0→l1→…→ln-1→ln,

reorder it to: l0→ln→l1→ln-1→l2→ln-2→…

you must do this in-place without altering the nodes』 values.

for example,

given , reorder it to .

分析:這道題的思路首先用快慢指標找到鍊錶的中點,然後將此鍊錶分成兩部分,再將後面的鍊錶逆序,最後將兩部分合併即可。

第一種解法

class solution

tail->next = nullptr; //分成一半 前半部分在奇數時比後半部分小1

reverselist(lowp);

fastp = head;

tail = nullptr;

while(fastp != nullptr)

if(lowp != nullptr)

tail->next = lowp; //把最後乙個元素,即中間那個元素新增到鍊錶的最後

}void reverselist(listnode* &head)

head->next = nullptr;

head = pre;

}};

第二種解法

class solution

}listnode* findmid(listnode* head)

return slow

}listnode* reverselist(listnode *head)

head->next = nullptr;

return pre;

}};

第三種解法

public

class

solution

listnode mid = slow.next;

listnode last = mid;

listnode pre = null;

while(last != null)

slow.next = null;

while(head != null && pre != null)

}}

鍊錶 reorder list

我之前是想著,用棧來儲存倒置的鍊錶,然後再以結點數作為while條件來依次地插入。可是超時了。因為別人題解裡也有這種做法,但是有通過,看了一下,可能原因出在 別人找了鍊錶的中點,只是用棧儲存了鍊錶的後半部分 而我是棧儲存全部部分。看了題解受到啟發,用了另一種方法 化解為熟悉的三個小題 感覺這種思想不...

Reorder List 穿插反轉鍊錶

given a singly linked list l l0 l 1 ln 1 l n,reorder it to l 0 ln l1 l n 1 l 2 ln 2 you may not modify the values in the list s nodes,only nodes itsel...

pta重排鍊錶

本文提供pta重排鍊錶的兩種方法,兩種都是使用陣列模擬鍊錶的操作,區別在與所使用空間的大小不同,從而導致時間複雜度也不同。重排鍊錶的第一種方法 這種方法節省了很多空間,但在n非常大時會超時。include include includetypedef struct node list struct ...