题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解题思路:先遍历各个节点,将每个节点存入vector容器中,找出只有一个的进行重新存储链接
参考代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <list>
#include <unordered_map>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (pHead == NULL)
return NULL;
vector<ListNode*> my_res;
vector<ListNode*> result;
ListNode* my_head;
ListNode* res_head;
ListNode* res;
my_head = pHead;
while (my_head != NULL)
{
my_res.push_back(my_head);
my_head = my_head->next;
}
int temp;
int count;
for (int i = 0; i < my_res.size(); ++i) {
temp = my_res[i]->val;
count = 0;
for (int j = 0; j < my_res.size(); ++j) {
if (temp == my_res[j]->val)
count++;
}
if (count == 1)
{
// cout<<my_res[i]->val<<endl;
result.push_back(my_res[i]);
}
}
if (result.empty())
return NULL;
else
res = res_head = result[0];
for (int k = 1; k < result.size(); ++k) {
res_head->next = result[k];
res_head = res_head->next;
}
if (res_head->next != NULL)
res_head->next = NULL;
return res;
}
};
int main() {
Solution solution;
ListNode ListNode1(1);
ListNode ListNode2(1);
ListNode ListNode3(2);
ListNode ListNode4(3);
ListNode ListNode5(3);
ListNode ListNode6(4);
ListNode ListNode7(5);
ListNode ListNode8(5);
ListNode1.next = &ListNode2;
ListNode2.next = &ListNode3;
ListNode3.next = &ListNode4;
ListNode4.next = &ListNode5;
ListNode5.next = &ListNode6;
ListNode6.next = &ListNode7;
ListNode7.next = &ListNode8;
ListNode* my_head = &ListNode1;
ListNode* my_result;
my_result = solution.deleteDuplication(my_head);
if (my_result==NULL)
cout<<"NULL"<<endl;
while (my_result!=NULL)
{
cout<<my_result->val<<endl;
my_result = my_result->next;
}
return 0;
}
本文介绍了一种在排序链表中删除重复节点的方法,通过遍历链表并将节点存储到vector容器中,筛选出只出现一次的节点并重新链接,最终返回处理后的链表头指针。

227

被折叠的 条评论
为什么被折叠?



