题解 | #删除有序链表中重复的元素-I#
删除有序链表中重复的元素-I
http://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79
思路:
由于链表中的数字是有序排列的,所以相同的数字一定是排在一起的,因此在寻找重复数字的时候只需要对比相邻两数的值是否相等即可,而对于链表,删除数据就是让指针指向改变,伪代码就是
head->next=head->next->next;
但是需要注意的点是,重复数字不一定只有两个,所以删除数据和指针移位这两个操作不能同时进行,因为同时进行只能删除一个数据。
代码如下:
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param head ListNode类 * @return ListNode类 */ ListNode* deleteDuplicates(ListNode* head) { // write code here if(head==NULL) { return NULL; } if(head!=NULL && head->next==NULL) { return head; } ListNode* temp=head; while(temp!=NULL && temp->next!=NULL) { if(temp->val==temp->next->val) { ListNode* pCurrent = temp->next; temp->next=pCurrent->next;//删除数据 } else//一定要注意这一点 { temp=temp->next;//指针移动 } } return head; } };
牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法