一、题目描述
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
![](https://i-blog.csdnimg.cn/blog_migrate/821ead27619b2e4fefd0d4c18d923379.png)
示例 1:
输入:head = [1,1,2]
输出:[1,2]
示例 2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/17cdf342ee266dcfbfbd8ba72d3a6a4e.png)
三、解题思路
从前往后扫描链表,如果下一个结点的值和当前结点的值相同,则将当前结点的next指针指向下下个结点(跳过下一个结点),如果不相等,就将当前指针往后移一个位置。
四、AC代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode p = head;
while(p!=null && p.next!=null){
if(p.val == p.next.val){ //两个结点值相等
p.next = p.next.next; //删掉p的下一个结点
}
else
p = p.next; //指针后移
}
return head;
}
}