剑指offer-python

删除链表中重复的节点

2018-08-28  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读