题目:
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
思路:
具体地,我们从指针 cur 指向链表的头节点,随后开始对链表进行遍历。如果当前 cur 与 cur.next 对应的元素相同,那么我们就将 cur.next 从链表中移除;否则说明链表中已经不存在其它与 cur 对应的元素相同的节点,因此可以将cur 指向 cur.next。当遍历完整个链表之后,我们返回链表的头节点即可。
为什么不直接用头结点,因为如果头结点去操作了,会丢失头结点地址
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/*
*deleteDuplicates:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
struct ListNode* head:已排序的链表的头节点 head
返回值:删除之后的头节点
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
if (!head) {
return head;
}//为空
struct ListNode* cur = head;//操作指针
while (cur->next) {
if (cur->val == cur->next->val) {
cur->next = cur->next->next;//删除下一个节点
} else {
cur = cur->next;//移动
}
}
return head;
}