python實現(xiàn)leetcode之143. 重排鏈表

解題思路

三步走:
第一步,找到中點,使用快慢指針
第二步,后半部分逆序
第三步,合并前后兩個半部分,直到到達中間位置

143. 重排鏈表

代碼

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reorderList(self, head: ListNode) -> None:
        if not head: return head
        slow = fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        bp = slow  # break point跳出的點
        # 后半部分逆序
        p = slow.next
        slow.next = None
        while p:
            tmp = p.next
            p.next = slow
            slow = p
            p = tmp
        # 然后合并
        merge(head, slow, bp)



def merge(x, y, gap):
    if x == gap:
        x.next = None
        return
    if not y: return
    xn = x.next
    yn = y.next
    x.next = y
    y.next = xn
    merge(xn, yn, gap)
效果圖
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 143. 重排鏈表 給定一個單鏈表 L:L0→L1→…→Ln-1→Ln ,將其重新排列后變?yōu)椋?L0→Ln→L1→...
    TheKey_閱讀 296評論 0 1
  • 當前Leetcode的鏈表標簽題目一共53道題,除了會員題目,題解基本都在這了,還可能陸續(xù)更新一題多解~ 簡單 (...
    李白開水閱讀 471評論 0 2
  • 1. 鏈表構建、增刪 2. 字節(jié)跳動面試題:Leetcode 143. 重排鏈表 https://leetcode...
    自信俠閱讀 255評論 0 1
  • 轉(zhuǎn)載自https://leetcode-cn.com/circle/article/YGr54o/ (一)雙指針思...
    今天柚稚了么閱讀 320評論 0 0
  • 刪除鏈表的倒數(shù)第N個節(jié)點 給定一個鏈表,刪除鏈表的倒數(shù)第 n 個節(jié)點,并且返回鏈表的頭結點。 示例:給定一個鏈表:...
    我是小曼巴閱讀 361評論 0 0

友情鏈接更多精彩內(nèi)容