數據結構與算法 —— 鏈表linked list(03)

繼續關於linked list的算法題:

 

刪除排序鏈表中的重複元素node

給定一個排序鏈表,刪除全部重複的元素使得每一個元素只留下一個。python

 

案例:程序員

給定 1->1->2,返回 1->2算法

給定 1->1->2->3->3,返回 1->2->3微信

 

解題思路:指針

這道題很簡單,只須要比較當前節點和下一個節點,相同,則當前節點的指針指向下一節點的下一節點,不相同,遞歸下一節點。仍是要注意一樣的問題,單向鏈表是隻能向後不能向前的,因此,要保留首節點。code

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

class Solution(object):
    def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head:
            return None
        pre = head
        while pre.next:
            if pre.val == pre.next.val:
                pre.next = pre.next.next
            else:
                pre = pre.next
        return head
    

咱們繼續來看另一道題目

交換相鄰結點blog

給定一個鏈表,對每兩個相鄰的結點做交換並返回頭節點。排序

例如:
給定 1->2->3->4,你應該返回 2->1->4->3遞歸

你的算法應該只使用額外的常數空間。不要修改列表中的值,只有節點自己能夠​​更改。

解題思路:

這裏思路很明確,每次循環兩個變量,在循環中維護兩個變量,temp1和temp2,分別表明每當前次循環的第一個節點和第二個節點,交換他們的位置,並把原來的pre指針指向調整位置後的第一個節點,第二個節點的指針指向後續指針。dump表明新列表的頭元素,pre表明每次循環的前置指針元素。代碼以下:

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

class Solution(object):
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        dump = pre = ListNode(-1)
        if not (head and head.next):
            return head
        while head and head.next:
            temp1 = head
            temp2 = head.next
            temp1.next = temp2.next
            temp2.next = temp1
            pre.next = temp2
            pre = temp1
            head = temp1.next
            
        return dump.next

遞歸的實現代碼以下:

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

class Solution(object):
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        
        if not (head and head.next):
            return head
        new_head =  head.next
        head.next = self.swapPairs(head.next.next)
        new_head.next=head
        return new_head

  coding交流羣:226704167,鄭州程序員羣:59236263願和各位一塊兒進步!

微信公衆號:歡迎關注

相關文章
相關標籤/搜索