删除链表中重复的节点
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