题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
输入: 1->1->2
输出: 1->2
输入: 1->1->2->3->3
输出: 1->2->3
解题思路
采用双指针
:cur,pre- 判断链表中的元素如果链表中没有元素或只有一个元素直接返回
head
即可 - 利用循环来判断两个指针所指向的链表中元素的值是否相等,不相等两个指针都往后移动一个,两个元素相等就将pre指针往后移动一个,不赋给cur即可。
Cpp实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL || head->next == NULL)
return head;
ListNode* cur = head;
ListNode* pre = head->next;
while(pre != NULL){
if(pre->val != cur->val){
cur->next = pre;
cur = pre;
}
pre = pre->next;
}
cur->next = NULL;
return head;
}
};
- 时间复杂度:O(n)
Python实现
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
res = head
while head.next != None:
if head.val == head.next.val:
head.next = head.next.next
else:
head = head.next
return res
- 时间复杂度:O(n)