题目描述:
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
输入:head = [1,1,2]
输出:[1,2]
输入:head = [1,1,2,3,3]
输出:[1,2,3]
题目思路:
给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,所以我们只需要对链表进行一次遍历,就可以删除重复的元素。
具体地,我们从指针 temp指向链表的头节点,随后开始对链表进行遍历。如果当前 temp与 temp.next 对应的元素相同,那么我们就将 temp.next从链表中移除;否则说明链表中已经不存在其它与 temp对应的元素相同的节点,因此可以将 temp指向temp.next。
当遍历完整个链表之后,我们返回链表的头节点即可。
Attention:代码中并没有释放被删除的链表节点的空间。
代码如下:
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head) return NULL;
ListNode *temp = head;
while (temp->next)
{
if (temp->val == temp->next->val)
temp->next = temp->next->next;
else
temp = temp->next;
}
return head;
}
};