题解 | #删除有序链表中重复的元素-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;
}
};牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法
查看12道真题和解析
