刪除排序鏈表中的重複元素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願和各位一塊兒進步!
微信公衆號:歡迎關注