给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
由于链表是排序后的,所以我们只需要遍历链表判断当前节点和下一个节点是否相等,如果相等则跳过下一个节点到下下个节点直到遇见和当前节点不相等的节点。注意:由于我们每次需要访问cur.next,为了避免运行错误,我们只需要遍历到最后一个节点之前。
代码如下:
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;
}
}
public ListNode deleteDuplicates(ListNode head) {
if(head==null) {
return head;// 链表为空
}
ListNode cur=head;// 复制指针,指向第一个结点
while(cur.next!=null) {// 结束条件:指针指到的下一个结点为空
if(cur.val==cur.next.val) { // head指到的结点的值与下一个节点的值相等
cur.next=cur.next.next; // 跳过下一个结点。
}else {
cur=cur.next;// 值不同,head指向下一个结点
}
}
return head;
}