1,题目要求
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.
也就是删除单链表中重复的元素。
2,题目思路
一开始想用hash表来统计单链表重复出现的元素,其中hash就用unordered_set来实现。
但是题目中的单链表中出现的重复元素都是连续出现的,因此没必要这么复杂。只需要一次对链表进行遍历即可。
3,程序源码
/**
* 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* node = head;//创建一个新的节点来实现对链表的遍历
while(node != NULL)
{
if(node->next == NULL)//需要先对下一个节点的存在性进行判断,否则node->next->val会出错
break;
if(node->val == node->next->val)
{
node->next = node->next->next;//实现删除操作
}
else
node = node->next;
}
return head;
}
};