链表
1.删除链表中重复的结点
题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:
非递归:
1 . 首先添加一个头节点,以方便碰到第一个,第二个节点就相同的情况
2 .设置 p1 ,p2 指针, p1指针指向当前确定不重复的那个节点,而p2指针相当于工作指针,一直往后面搜索。
代码:
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead==NULL||pHead->next==NULL)
return pHead;
ListNode *Head=new ListNode(0); //定义新的头指针
Head->next=pHead;
ListNode* p1=Head;
ListNode* p2=Head->next;
while(p2)
{
if(p2->next&&p2->val==p2->next->val)
{
while(p2->next&&p2->val==p2->next->val)
{
p2=p2->next;
}
p1->next=p2->next; //抹掉所有相等的节点(即p2)
p2=p2->next;
}else{ //如果p2和p2->next不相等或者p2->next==NULL的话
p1=p1->next;
p2=p2->next;
}
}
return Head->next;
}
};
总结:
自己做的时候思路大概正确,但是,不会删除重复节点,即 p1->next=p2->next ,又学到一点点。