每日一題,每日一練。8 .鏈表的中間結點

876. 鏈表的中間結點

.
給定一個帶有頭結點 head 的非空單鏈表,返回鏈表的中間結點。

如果有兩個中間結點,則返回第二個中間結點

示例 1:

輸入:[1,2,3,4,5] 輸出:此列表中的結點 3 (序列化形式:[3,4,5]) 返回的結點值爲 3 。
(測評系統對該結點序列化表述是 [3,4,5])。 注意,我們返回了一個 ListNode 類型的對象 ans,這樣: ans.val =
3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.

示例 2:

輸入:[1,2,3,4,5,6] 輸出:此列表中的結點 4 (序列化形式:[4,5,6]) 由於該列表有兩個中間結點,值分別爲 3 和
4,我們返回第二個結點

一道非常簡單的鏈表題(有點過於簡單了,,)開始的時候想的是先遍歷一遍鏈表,得到鏈表的長度從而得到中值位置,然後再遍歷到中止就可以了

代碼如下:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def middleNode(self, head: ListNode) -> ListNode:
        c=head
        count=1
        half=1
        while(c.next!=None):
            c=c.next
            count=count+1
        count=(count)//2+1
        c=head
        while(half!=count):
            c=c.next
            half=half+1
        return c

後來改進的時候發現在第一遍遍歷是可以用一個順序表存進去,這樣每個節點和他的位置就是一一對應的關係,不用第二次遍歷就能提取中值了,不過這種方法要注意特殊值
代碼如下:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def middleNode(self, head: ListNode) -> ListNode:
        a=[]
        if(head.next==None):
            return head
        while(head!=None):
            a.append(head)
            head=head.next
        return a[(len(a))//2]

一道輕鬆的小題開啓了繁忙的一天~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章