删除链表中重复的结点
在一个排序的链表中,存在重复的节点,请删除该链表中重复的结点,重复的结点不保留,返回链表的头指针。例如,链表1->2->3->3->4->4->5处理后为1->2->5。
题解:
直接删除法:用当前结点指针与下一结点指针遍历整个链表,当当前节点与下一结点相等时,则下一结点+1,直到不相同为止。此时,更新当前结点为下一结点,下一结点变为下一结点的下一结点。不断更新迭代。直到遍历整个链表。
代码如下:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead){
if(!pHead) return NULL;
ListNode* List=new ListNode(-1);
ListNode* cur=pHead;//当前结点
ListNode* right;//下一结点
if(pHead->next)
right=pHead->next;
else
return pHead;
ListNode* p=List;
p->next=pHead;
while(cur&& right){
if(right&& cur->val==right->val){//判定重复结点
while(right&& cur->val==right->val)//找到不重复的节点
right=right->next;
p->next=right;
cur=right;
right=cur->next;
}
else
{//无重复结点
p=cur;
cur=right;
right=right->next;
}
}
return List->next;
}
};