Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3.
给出一个排好序的链表,删除所有的重复的数字,让每个元素只出现一次。 比如: 给出 1->1->2, 返回1->2. 给出1->1->2->3->3, 返回1->2->3.
既然链表本身已经排好序了,那么只用比较当前位置的值和next的值是否一样,一样就把next指向下一个再继续判断就好了,思路还是比较简单,但是有几个容易忽略的点需要注意。
在自己检测时可以试试代码对下面几个测试用例是否能通过:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null) return head;
ListNode p = head;
while (p.next != null) {
ListNode q = p.next;
if (q.val == p.val) {
if (q.next != null) {
p.next = q.next;
}
else p.next = null;
}
else p = p.next;
}
return head;
}
}