题目介绍
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
题目分析
这是一个典型的链表操作,基本思路为首先查询链表,碰到前后相同的,则跳过,直到不相同,接着依次赋值即可。
源代码
/*
struct ListNode {
int val;
struct 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* node=pHead;
ListNode* new_node = new ListNode(0);
new_node->next = NULL;//p1的轨迹记录没有重复的节点
ListNode* p1=new_node;
while(node)
{
if(node->next&&node->val==node->next->val)
{
while(node->next&&node->val==node->next->val)
{
node=node->next;
}
node=node->next;
new_node->next=node;
}
else
{
new_node->next=node;
new_node=node;
node=node->next;
}
}
return p1->next;
}
};