手撕代码锻炼 83. 删除排序链表中的重复元素
作者:
liweidong
,
2023-03-19 22:01:28
,
所有人可见
,
阅读 34
/*
* 遍历每个节点
* 如果值和上一个节点一样,删除该节点
* 需要存储上一个值,存储上一个指针
*/
#include <iostream>
#include <vector>
using namespace std;
struct Node{
int val;
Node* next;
Node(int _val = -1): val(_val), next(nullptr){}
};
Node* deleteRepeatedNode(Node* head){
Node* p = head;
Node* q = head;
int last = INT_MAX;
// 遍历每个节点
while(p){
// 和上一个节点的值相同,删除本节点
if(p->val == last){
q->next = p->next;
delete p;
p = q->next;
continue;
}
// 若值不相同
last = p->val;
q = p;
p = p->next;
}
return head;
}
int main(){
// 构造链表
vector<int> nums{1,1,2};
Node* dummy = new Node;
Node* p = dummy;
for(int x : nums){
p->next = new Node(x);
p = p->next;
}
Node* head = dummy->next;
delete dummy;
Node* res = deleteRepeatedNode(head);
// 打印
p = res;
while(p){
cout<<p->val<<" ";
p = p->next;
}
cout<<endl;
return 0;
}