LeetCode 143 重排鍊錶

2021-10-23 15:43:13 字數 994 閱讀 3121

思路:

將鍊錶一分為二,對半切開後,將後半部分的鍊錶進行翻轉,翻轉過後,對這兩個部分的鍊錶從頭開始遍歷,並進行拼接,拼接時,第一部分的鍊錶的每乙個節點後面都需要拼接乙個第二部分的鍊錶

例子:原始鍊錶

1->2->3->4->5
對半切開後,得到

1->2->3

4->5

對後半部分進行翻轉

1->2->3

5->4

最後,進行拼接合併

1->2->3   ->    1->5->2->4->3 

5->4

**:

public void reorderlist(listnode head) 

int len = 0;

listnode cur = head;

// 得到鍊錶的總長度

while (cur != null)

// 對鍊錶進行對半切分

int pos = len / 2 + 1;

cur = head;

while (--pos > 0)

// 拿到後一部分的頭節點

listnode cutnode = cur.next;

// 與原始鍊錶進行斷鏈

cur.next = null;

// 翻轉後一部分的鍊錶

listnode cuthead = reverse(cutnode);

cur = head;

// 拼接

while (cur != null && cuthead != null)

}// 對鍊錶進行翻轉

private listnode reverse(listnode head)

return pre;

}class listnode

}

Leetcode 143 重排鍊錶

給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。解題思路 前一半 0,size 1 2 的結點位址進入佇列,先進先出,後一半 size 1 2,size 的結點入棧,...

LeetCode 143 重排鍊錶

給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。解題思路 首先想到的是找到要插入的元素,壓入堆疊,彈出時剛好為期望的順序,然後插入對應位置。再換一種思路,找到待插入節...

leetcode143 重排鍊錶

給定乙個單鏈表 l l0 l1 ln 1 ln 將其重新排列後變為 l0 ln l1 ln 1 l2 ln 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 5,重新排列為 1 5 2...