题目描述
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表
思路
- 利用一个cur引用遍历链表,遇到相同的元素则指向下一个元素判断(cur.next = nur.next,next)
- 所有相同的元素只保留第一个
- 由于删除的是后续的重复节点,所以无论头节点是否重复,都无需删除,即无需使用傀儡节点
- 每判断两个元素是否相同后都需要确保cur.next不能为空(eg:1 - > 1 -> 1),否则会空指针异常,所以此判断应放在if语句中,整体放到while循环中判断cur.next是否为空
代码
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode cur = head;
if(head == null || head.next == null){
return head;
}
while(cur.next != null){
if(cur.val == cur.next.val){
cur.next = cur.next.next;
}else{
cur = cur.next;
}
}
return head;
}
}