题解 | #删除有序链表中重复的元素-I#
删除有序链表中重复的元素-I
https://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79
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
// 判断是否重复,我想到了用Hash表
// 把节点的元素加入,如果加入失败,则直接跳过这个
// 后来仔细审题,发现没有比较用哈希表,因为是排序好的,直接当前轮次比较就行
if (head == null) {
return null;
}
// 要把head保留好,之后还要return head
// p1用来记录当前节点,p2用来记录要接上去的后继节点
ListNode p1 = head, p2 = head.next;
while (p2 != null) {
if (p1.val != p2.val) {
p1.next = p2;
p1 = p1.next;
}
p2 = p2.next;
}
p1.next = null;
return head;
}
}
思路其实很简单,首先保留head,头节点,之后好return。p1记为当前节点,判断p2后继节点的值是否与它相等。
这里面关键点在于,结束之后,要把p1的next置为null,否则会继续接着,没有消掉。

