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; }
链表删除节点
最新推荐文章于 2023-04-13 17:17:20 发布