携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
一、题目描述:
83. 删除排序链表中的重复元素 - 力扣(LeetCode) (leetcode-cn.com)
给定一个已排序的链表的头
head, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例 1:
输入:head = [1,1,2]
输出:[1,2]
示例 2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
提示:
- 链表中节点数目在范围 [0, 300] 内
- -100 <= Node.val <= 100
- 题目数据保证链表已经按升序 排列
二、思路分析:
先判断题给链表是否为空或者是否只有一个结点,若是,则直接返回题给链表。
若题给链表不止一个结点,先声明一个cur指针指向头结点。
然后让cur指针从头结点开始遍历链表,循环条件是cur指针指向的结点不为空且cur指针指向的结点的下一个结点也不为空。
在循环中,判断cur指向的结点以及其下一个结点的值是否相同,若相同,就将cur指向的结点的next指向cur指向的结点的下一个结点;若不同,就将cur指针后移。
遍历结束后返回头结点,得到的新的结点就是删除了重复元素后的新结点。
三、AC 代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
if(!head || !head->next)
return head;
struct ListNode* cur = head;
while(cur && cur->next){
if(cur->val == cur->next->val){
cur->next = cur->next->next;
}
else{
cur = cur->next;
}
}
return head;
}