鏈表的優缺點以及例題 LeetCode 第 25 題


 

鏈表(LinkedList)

  • 單鏈表:鏈表中的每個元素實際上是一個單獨的對象,而所有對象都通過每個元素中的引用字段鏈接在一起。 
  • 雙鏈表:與單鏈表不同的是,雙鏈表的每個結點中都含有兩個引用字段。

 

鏈表的優點如下:

  • 鏈表能靈活地分配內存空間;
  • 能在 O(1) 時間內刪除或者添加元素,前提是該元素的前一個元素已知,當然也取決於是單鏈表還是雙鏈表,在雙鏈表中,如果已知該元素的后一個元素,同樣可以在 O(1) 時間內刪除或者添加該元素。

鏈表的缺點是:

  • 不像數組能通過下標迅速讀取元素,每次都要從鏈表頭開始一個一個讀取;
  • 查詢第 k 個元素需要 O(k) 時間。

 

示例:

給定這個鏈表:1->2->3->4->5

當 k=2 時,應當返回:2->1->4->3->5

當 k=3 時,應當返回:3->2->1->4->5

 

在翻轉鏈表的時候,可以借助三個指針:prev、curr、next,分別代表前一個節點、當前節點和下一個節點,實現過程如下所示。

 

 

class Solution:
    def reverseKGroup(self, head, ListNode, k: int):
        l = 0
        heads = ListNode(0)
        ans = heads
        ls = head
        while (ls != None):
            l = l + 1
            ls = ls.next
        while (head != None):
            if l >= k:
                pre = head
                st = head
                for i in range(k):
                    st = st.next
                new = ListNode(0)
                new.next = st
                for i in range(k):
                    last = head.next
                    head.next = new.next
                    new.next = head
                    head = last
                    ans.next = new.next
                ans = pre
                l -= k
            else:
                ans.next = head
                break
        return heads.next

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM