leetcode 143 重排鍊錶

2021-10-25 00:07:44 字數 1714 閱讀 5415

目錄

一、題目內容

二、解題思路 

三、**

給定乙個單鏈表 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->4->3.

先按照順序儲存節點,然後首尾指標依次連線即可,如果首尾指標正好重合,則末尾next新增重合的元素即可,否則next為空。

注:link為後半段鍊錶連線的節點。

# 2020-10-20

# definition for singly-linked list.

class listnode:

def __init__(self, val=0, next=none):

self.val = val

self.next = next

def __repr__(self):

return str(self.val)

class solution:

def reorderlist(self, head: listnode) -> none:

"""do not return anything, modify head in-place instead.

"""cache =

node = head

while node:

node = node.next

i, j = 0, len(cache) - 1

link = listnode()

while i < j:

link.next = cache[i]

link = cache[i].next = cache[j]

i += 1

j -= 1

if i == j:

link.next = cache[i]

cache[i].next = none

else:

link.next = none

if __name__ == '__main__':

head_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

head = listnode(head_list[0])

p = head

i = 1

while p is not none:

p.next = listnode(head_list[i])

i += 1

p = p.next

if i == len(head_list):

break

s = solution()

s.reorderlist(head)

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...