美文网首页剑指offer-python
删除链表中重复的节点

删除链表中重复的节点

作者: 小歪与大白兔 | 来源:发表于2018-08-28 15:09 被阅读0次

    题目一:在O(1)时间内删除链接节点(非尾节点)
    思路:把下一个节点的内容复制到需要删除的节点上覆盖原有的内容即可。如果删除的是尾节点,则需顺序遍历完成删除;如果删除的链表中只有一个节点,则删除之后,需把节点设置为None.

    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def deleteNode(self, node):
            """
            :type node: ListNode
            :rtype: void Do not return anything, modify node in-place instead.
            """
            node.val = node.next.val
            node.next = node.next.next    
    

    题目二:删除链表中重复的节点
    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
    思路:要删除有序链表中所有的重复节点,而头结点有可能就是重复节点。这样的比较好的解决方式就是新建头结点,然后往后遍历,同样的值就全部略过。

    # -*- coding:utf-8 -*-
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    class Solution:
        def deleteDuplication(self, pHead):
            # write code here
            if pHead is None:
                return None
            #创建一个新的头结点root,因为可能pHead就是重复节点
            root = ListNode(-1)
            root.next = pHead
            last = root
            while pHead and pHead.next:
                if pHead.val == pHead.next.val:
                    value = pHead.val
                    while pHead and value == pHead.val:
                        pHead = pHead.next
                    last.next = pHead
                else:
                    last = pHead
                    pHead = pHead.next
            return root.next
    

    相关文章

      网友评论

        本文标题:删除链表中重复的节点

        本文链接:https://www.haomeiwen.com/subject/pmtqwftx.html