在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
数据结构及初始化:
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };
代码如下:
ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL) return NULL; ListNode *head=new ListNode(-1);//创建一个头结点,防止头结点被删除 head->next=pHead;//创建的头结点初始化 ListNode *pre=head;//两个操作指针pre和p ListNode *p=head->next; while(p&&p->next) { if(p->val==p->next->val)//如果p指向的值和p->next指向的值相同 { int val=p->val;//保留当前的值,因为下面p会移动 while(p&&p->val==val) p=p->next; pre->next=p;//此时是p指向的值和val不相同,则让pre->next=p;间接删除了重复的节点 } else//出现p指向的值和下一个值不相同,移动pre和p { pre=p; p=p->next; } } return head->next;//返回链表的头(不带头结点) }