链表删除节点

来源:互联网 发布:淘宝网纸杯蛋糕 编辑:程序博客网 时间:2024/06/09 23:19
struct ListNode{int val;ListNode *next;ListNode(int x):val(x),next(NULL){}};//从一个链表中删除重复的节点,保留一个该节点ListNode* deleteDuplicates(ListNode* head){if(head==NULL)return head;ListNode *pre = head;ListNode *cur = head->next;while(cur!=NULL){while(cur!=NULL&&pre->val==cur->val)cur=cur->next;pre->next = cur;pre = cur;}return head;}//从一个链表中删除重复的节点,并且只保留单个的节点 ListNode* deleteDuplicates(ListNode* head) { if(head==NULL) return head; ListNode* NewHead = new ListNode(INT_MAX); NewHead->next = head; ListNode* front = NewHead,*back = NewHead->next; while(back!=NULL) { while(back->next!=NULL&&back->next->val==back->val)//找到当前点与下一个点不同的点 { back = back->next; } if(front->next!=back)//如果两个点之间非连续的,那么将后边的点后移,front直接连接到下一个检测的点 { back = back->next;//将当前点向后移动 front->next = back;//下一个点连接上上一个点 } else//表示两者之间是连接的,因此,直接将front前移,back往后移动 { front = back; back = back->next; } } return NewHead->next; }
                                             
0 0