原题网址:https://www.lintcode.com/problem/remove-duplicates-from-sorted-list/description
描述
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
您在真实的面试中是否遇到过这个题?
样例
给出 1->1->2->null
,返回 1->2->null
给出 1->1->2->3->3->null
,返回 1->2->3->null
标签
链表
思路:遍历链表,如果当前节点值与下一个节点值相等,当前节点的next指向下一个节点的next;如果不相等,当前节点后移一位。
注意:循环判断条件有两个,当前节点和当前节点的next都不能为NULL;
AC代码:
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: head is the head of the linked list
* @return: head of linked list
*/
ListNode * deleteDuplicates(ListNode * head) {
// write your code here
if (head==NULL)
{
return head;
}
ListNode *p=head;
while (p!=NULL&&p->next!=NULL)
{
if (p->val==p->next->val)
{
p->next=p->next->next;
}
else
{
p=p->next;
}
}
return head;
}
};
初次代码没通过,因为我在“ 如果当前节点值与下一个节点值相等,当前节点的next指向下一个节点的next ” 这个程序块中又加了一句 p=p->next; 蠢……