一.题目
Remove Duplicates from Sorted List
Total Accepted: 53757 Total Submissions: 157010My SubmissionsGiven 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
.
Show Tags
Have you met this question in a real interview?
Yes
No
二.解题技巧
这道题只是判断当前节点与下一个节点的值是否相等,如果相等,则越过该节点,如果与不相等,则将其保存的值复制到新的节点上,并更新指向该节点的指针,对于最后一个节点要进行特殊处理,将最后一个节点与新的链表的最后一个节点的值进行比较,如果不相等,则在新的链表最后添加一个值与原来链表的最后一个节点相同的节点,否则就忽略原来链表的最后一个节点。同样的,如果链表只有一个节点,那么就创建一个值与原来节点相同的新节点,并直接返回。
三.实现代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
#include <iostream>
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution
{
public:
ListNode *deleteDuplicates(ListNode *head)
{
if (head == NULL)
{
return NULL;
}
ListNode Header(10);
ListNode *Tail = &Header;
ListNode *Next = NULL;
bool IsSingle = true;
while(head->next != NULL)
{
IsSingle = false;
Next = head->next;
if (head->val != Next->val)
{
Tail->next = new ListNode(head->val);
Tail = Tail->next;
}
head = Next;
}
if (IsSingle)
{
return new ListNode(head->val);
}
if (Tail->val != head->val)
{
Tail->next = new ListNode(head->val);
}
return Header.next;
}
};
四.体会
这道题的难点在于处理只有一个节点的情况和最后一个节点,其他的部分并不是很难,也不需要什么特殊的算法,就是遍历一遍链表即可。
版权所有,欢迎转载,转载请注明出处,谢谢
