题目:删除链表中重复的结点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
用一个Head作为返回的头指针,pre作为上一个不重复的节点,last为遍历节点指针
#include<iostream>
#include<vector>
#include<stack>
#include<unordered_map>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int x):
val(x),next(NULL){}
};
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead==NULL || pHead->next==NULL) return pHead;//没有节点或者只有一个节点,直接返回
ListNode *Head = new ListNode(0);//头节点,防止删开头的
ListNode *pre=Head,*last=pHead; //pre是上一个唯一节点,lst是搜索节点
while(last){
// last == last->next
if(last->next && last->val==last->next->val){
while(last->next && last->val==last->next->val){
last = last->next;
}
last = last->next;
pre->next = last;
}
// last != last->next
else{
pre->next = last;
pre = pre->next;
last = last->next;
}
}
return Head->next;
}
};
int main(){
ListNode *test = new ListNode(2);
ListNode *in;
test->next = new ListNode(1);
test->next->next = new ListNode(1);
Solution s;
in = s.deleteDuplication(test);
while(in){
cout<<in->val<<" ";
in = in->next;
}
return 0;
}