题目
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
思路
因为是有序链表,若重复,一定相邻,所以只需对相邻的节点依次比较即可。定义一个新指针,对其进行操作。(我一开始写的对head直接进行比较,最后导致节点值丢失)
代码
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return head;
}
ListNode cur = head; //一定要,定义一个新指针,不能直接对head进行操作
while (cur.next != null) {
if (cur.val == cur.next.val) {
cur.next = cur.next.next;
} else {
cur = cur.next;
}
}
return head;
}
}
对于最后return head,习惯了编程方式,所以会觉得最后head没有变化,我自己觉得应该是 不要把ListNode cur = head想成这是赋值语句,就是两个指针,仅个人理解,不对我改。