奇偶連結串列的 Python 實現


假設我們有一個單鏈表,我們必須將所有奇數節點分組,然後是偶數節點。我們所說的節點位置而不是節點中的值。我們應該嘗試就地處理。因此,如果節點為 [1,22,13,14,25],則結果將為 [1,13,25,22,14]

要解決此問題,我們將按照以下步驟操作:

  • 如果 head 為 null 或 head 的下一個節點為 null,則返回 head
  • head1 := head,head2 := head 的下一個節點,head_beg := head 的下一個節點
  • 如果 head2 的下一個節點不為 null 並且 (head 的下一個節點的下一個節點不為 null)
    • head1 的下一個節點 := head2 的下一個節點
    • head2 的下一個節點 = (head 的下一個節點的下一個節點)
    • head1 := head1 的下一個節點,head2 := head2 的下一個節點
  • 如果 head2 的下一個節點不為 null
    • head1 的下一個節點 := head2 的下一個節點
    • head1 := head1 的下一個節點
  • head1 的下一個節點 := head2_beg,head2 的下一個節點 = null
  • 返回 head

讓我們看看以下實現以進行更好的理解:

示例

 線上演示

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
def print_list(head):
   ptr = head
   print('[', end = "")
   while ptr:
      print(ptr.val, end = ", ")
      ptr = ptr.next
   print(']')
class Solution(object):
   def oddEvenList(self, head):
      if head == None or head.next ==None:
         return head
      head1=head
      head2,head2_beg= head.next,head.next
      while head2.next!= None and head2.next.next!= None:
         head1.next = head2.next
         head2.next = head2.next.next
         head1 = head1.next
         head2 = head2.next
      if head2.next!=None:
         head1.next = head2.next
         head1 = head1.next
      head1.next = head2_beg
      head2.next = None
      return head
ob1 = Solution()
head = make_list([1,22,13,14,25])
print_list(ob1.oddEvenList(head))

輸入

[1,22,13,14,25]

輸出

[1, 13, 25, 22, 14, ]

更新日期:2020 年 5 月 4 日

613 次瀏覽

開啟您的 職業生涯

完成課程即可獲得認證

開始學習
廣告