题目
无序链表,删除重复节点
Write code to remove duplicates from an unsorted linked list.
Example1:
Input: [1, 2, 3, 3, 2, 1]
Output: [1, 2, 3]
Example2:
Input: [1, 1, 1, 1, 2]
Output: [1, 2]
Note:
The length of the list is within the range[0, 20000].
The values of the list elements are within the range [0, 20000].
Follow Up:
How would you solve this problem if a temporary buffer is not allowed?
思路
hash备忘录
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
// 头节点一定不会被删除,所以不需要哨兵节点
class Solution {
public:
ListNode* removeDuplicateNodes(ListNode* head) {
ListNode* pre = head;
ListNode* p = head;
int hash[20010]={0};
while(p!=nullptr){
if(hash[p->val])
pre->next=p->next;
else {
hash[p->val]=1;
pre=p;
}
p=p->next;
}
return head;
}
};