11 20 每日一題 147 對鍊錶進行插入排序

2021-10-10 16:21:13 字數 1510 閱讀 4341

對鍊錶進行插入排序。

插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序(用黑色表示)。

每次迭代時,從輸入資料中移除乙個元素(用紅色表示),並原地將其插入到已排好序的鍊錶中。

插入排序演算法:

插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。

每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。

重複直到所有輸入資料插入完為止。

示例 1:

輸入: 4->2->1->3

輸出: 1->2->3->4

示例 2:

輸入: -1->5->3->4->0

輸出: -1->0->3->4->5

通過次數49,568| 提交次數74,732**實現

# definition for singly-linked list.

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

class

solution

:def

insertionsortlist

(self, head: listnode)

-> listnode:

import sys

o = listnode(

-sys.maxsize)

p = o

t = o

cur = head

while cur:

if t.val < cur.val:

t.next

= cur

t = cur

cur = cur.

next

else

: temp = cur.

next

t.next

= temp

while p.

next

and p.

next

.val < cur.val:

p = p.

next

cur.

next

= p.

next

p.next

= cur

p = o

cur = temp

return o.

next

每日一題 反轉鍊錶

這道是牛客的題,給了鍊錶然後返回鍊錶的新表頭。拿到這道題首先肯定想到的是暴力求解,從表頭開始遍歷到尾,用尾元素作為新錶的表頭,然後遍歷尾元素的上乙個元素,鏈到新錶的最後然後不斷重複直到鍊錶的表頭鏈到新錶的尾巴 這樣有乙個很大的問題就是複雜度太高了,時間複雜度是o n n 這個時候我想到了肯定有簡單的...

LeetCode每日一題 回文鍊錶

題目 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 思路 判斷是否是回文,可以將鍊錶儲存在乙個陣列中,然後用兩個指標乙個指向頭,乙個指向尾,同時向中間掃瞄。演算法 複製鍊錶值到陣列列表中。使用雙指標法判斷是否為回文。cl...

每日一題 環形鍊錶(簡單)

給定乙個鍊錶,判斷鍊錶中是否有環。如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意 pos 不作為引數進行傳遞,僅僅是為了標識...