/**
*Copyright @ 2019 Zhang Peng. All Right Reserved.
*Filename:
*Author: Zhang Peng
*Date:
*Version:
*Description:删除重复链表
**/
#include<iostream>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode * pPreNode = nullptr;
ListNode * pNode = pHead;
while (pNode != nullptr)
{
if (pNode->val == pNode->next->val)
{
while (pNode->next != nullptr&&pNode->val == pNode->next->val)
{
ListNode * delNode = pNode;
pNode = pNode->next;
delete delNode;
delNode = nullptr;
}
if (pNode->next == nullptr)
{
ListNode * delNode = pNode;
pPreNode->next = nullptr;
delete delNode;
delNode = nullptr;
}
else
{
ListNode * delNode = pNode;
pNode = pNode->next;
delete delNode;
delNode = nullptr;
}
}
else
{
pPreNode = pNode;
pNode = pNode->next;
}
if (pPreNode == nullptr)
{
pHead = pNode;
}
}
return pHead;
}
};
ListNode* deleteDuplication2(ListNode* pHead)
{
ListNode * pPreNode = nullptr;
ListNode * pNode = pHead;
while (pNode != nullptr)
{
if (pNode->val == pNode->next->val)
{
while (pNode->next != nullptr&&pNode->val == pNode->next->val)
{
ListNode * delNode = pNode;
pNode = pNode->next;
delete delNode;
delNode = nullptr;
}
if (pNode->next == nullptr)
{
ListNode * delNode = pNode;
pPreNode->next = nullptr;
delete delNode;
delNode = nullptr;
}
else
{
ListNode * delNode = pNode;
pNode = pNode->next;
delete delNode;
delNode = nullptr;
}
}
else
{
pPreNode = pNode;
pNode = pNode->next;
}
if (pPreNode == nullptr)
{
pHead = pNode;
}
}
return pHead;
}
ListNode testcase()
{
ListNode node1(1);
ListNode node2(2);
ListNode node3(3);
ListNode node4(3);
ListNode node5(4);
ListNode node6(4);
ListNode node7(5);
node1.next = &node2;
node2.next = &node3;
node3.next = &node4;
node4.next = &node5;
node5.next = &node6;
node6.next = &node7;
return node1;
}
int main()
{
struct ListNode Node = testcase();
struct ListNode * Node2 = &Node;
/*ListNode Node = testcase();
ListNode * Node2 = &Node;*/
deleteDuplication2(Node2);
Solution s;
s.deleteDuplication(Node2);
struct ListNode *point = &Node;
while (point != nullptr)
{
cout << point->val << " ";
}
cout << endl;
system("pause");
return 0;
}
链表做函数参数,传进去之后单步调试,发现链表只有头指针是对的,别的全乱了,这是为什么呢?