题目:
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次。
例如:
给出的链表为1→1→2,返回1→2.
给出的链表为1→1→2→3→3,返回1→2→3.
数据范围:链表长度满足 0≤n≤100,链表中任意节点的值满足 ∣val∣≤100。
进阶:空间复杂度 O(1),时间复杂度 O(n)。
示例1
输入:{1,1,2}
返回值:{1,2}
示例2
输入:{}
返回值:{}
思路:
- 如何找重复节点?->多个相邻的节点值是相同的->要比较prev节点的值和下一个节点的值的情况。(向后多看一个节点)
- 找到重复元素后,如何让重复的元素保留一次?->保留第一个重复节点(prev指向的节点),删除cur对应的节点,保留prev。
- 当cur为空时,判断终止。
代码:
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
// write code here
ListNode dummyHead = new ListNode(101);
dummyHead.next = head;
ListNode prev = dummyHead;
ListNode cur = prev.next;
while(cur != null){
if(prev.val != cur.val){
prev = prev.next;
}else{
//此时cur是需要删除的元素
prev.next = cur.next;
}
cur = cur.next;
}
return dummyHead.next;
}
}