LeetCode链表83. 删除排序链表中的重复元素
题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
例子
一
输入: 1->1->2
输出: 1->2
二
输入: 1->1->2->3->3
输出: 1->2->3
思路
这个题想复杂了,这个链表重复的值是相邻的,我以为链表的元素杂乱无序的。所以思路较为复杂.
这个题只需要每次比较相邻的两个节点,如果有重复值,则进行节点删除。
更深一步的思考,如果节点值是杂乱无序的,我们首先要将已经出现的的va值给保存下来,然后删除后续重复出现的val值节点。
原题代码
详见链接:link.
节点值杂乱无序的代码
/**
* 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) {
ListNode* h = head;
//保存头节点,返回值
ListNode* temp = head;
ListNode* pre;
//进行删除操作时使用
int n = 0;
while(head != NULL){
n++;
head = head->next;
}
int *p;
p = new int[n];
int x = 0;
*//创建储存节点值的数组*
while(temp != NULL){
bool flag=1;
for(int i = 0;i < x;i++){
if(p[i] == temp->val){
pre->next = temp->next;
temp = temp->next;
flag=0;
}
//查重,删除重复值
}
if(flag){
p[x++] = temp->val;
pre = temp;
temp = temp->next;
}
}
return h;
}
};