69,382
社区成员
发帖
与我相关
我的任务
分享
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct Node{
int val;
Node *next;
}ListNode;
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (head == NULL)
return head;
ListNode* cur = head;
ListNode* pre = head->next;
ListNode* del = NULL;
while(pre != NULL)
{
if (cur->val == pre->val)
{
del = pre;
pre = pre->next; // <span style="color: #FF0000;">这句是有作用的,就是把pre指向next节点</span>
cur->next = pre; //
delete del; // <span style="color: #FF0000;">如果合并之后,这一句就是delete pre;另外建议你释放内存的时候这么写之后再加一句del = NULL;这样可以防止野指针的出现。</span>
}
else
{
cur = cur->next;
pre = pre->next;
}
}
return head;
}
};
int main()
{
ListNode *head,*listnode1,*listnode2;
head = (ListNode*)malloc(sizeof(ListNode));
// head = new ListNode;
// listnode1 = (ListNode*)malloc(sizeof(ListNode));
listnode2 = (ListNode*)malloc(sizeof(ListNode));
head->val = 0;
head->next = NULL;
for(int i = 0;i<3;i++)
{
if(i == 0)
{
listnode1 = head->next;
listnode1 = (ListNode*)malloc(sizeof(ListNode));
head->next = listnode1;
}
listnode1->val = i;
listnode1->next = (ListNode*)malloc(sizeof(ListNode));
listnode1 = listnode1->next;
}
listnode1->next = NULL;
Solution s ;
listnode2 = s.deleteDuplicates(head);
listnode2 = head;
while(listnode2->next != NULL)
{
printf("%d\n",listnode2->val);
listnode2 = listnode2->next;
}
return 0;
}
int main()
{
ListNode *head,*listnode1,*listnode2;
head = (ListNode*)malloc(sizeof(ListNode));
// head = new ListNode;
// listnode1 = (ListNode*)malloc(sizeof(ListNode));
listnode2 = (ListNode*)malloc(sizeof(ListNode));
for(int i = 0;i<3;i++)
{
if(i == 0)
{
listnode1 = head->next;
listnode1 = (ListNode*)malloc(sizeof(ListNode));
head->next = listnode1;
}
listnode1->val = i;
listnode1->next = (ListNode*)malloc(sizeof(ListNode));
listnode1 = listnode1->next;
}
listnode1->next = NULL;
Solution s ;
listnode2 = s.deleteDuplicates(head);
return 0;
}