Question:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
Algorithm:
在头结点前申请一个内存,用两个节点指向重复的头和尾
Accepted Code:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* deleteDuplicates(ListNode* head) { if(head==NULL||head->next==NULL) return head; ListNode* pre=new ListNode(0); //在头节点前插一个节点,可以不用判断头节点和后面的值相等 pre->next=head; ListNode* p=pre; while(p->next!=NULL) { ListNode* first=p->next; //重复元素首节点 ListNode* last=first->next; //重复元素尾节点 int count=0; while(last!=NULL&&first->val==last->val) { last=last->next; count++; } if(count>0) p->next=last; else p=p->next; } return pre->next; } };
时间: 2024-10-27 19:33:27