问题描述
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.
Subscribe to see which companies asked this question
补充说明:
给定一个排序过后的链表,将其中重复的值去掉,返回成功后的结果。
方案分析
- 如何判断值是否重复?判断两个元素值是否重复,需要两个指针,分别指向要比较的两个元素。
- 如何比较?其实比较简单,比较相邻的两个元素,如果值相同,则删除后边那个元素。
- 指针如何移动?如果比较的两个元素的值相同,删除后面那个元素后,将后面的那个指针后移,继续比较;
如果比较的两个元素的值不同,则同时后移两个指针。
python实现
# 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 []
cur_node = head
next_node = head.next
while(next_node):
if cur_node.val == next_node.val:
cur_node.next = next_node.next
else:
cur_node = cur_node.next
next_node = cur_node.next
return head