我的思路是:创建一个指针p用来移动比较,如果p.next的值==p.next.next的值,就删除下一个节点,即pre.next = pre.next.next,如果不同就移动下一个节点
public ListNode deleteDuplicates(ListNode head) {
ListNode pre = head;
ListNode next = head.next;
if(head==null||head.next == null) {
return head;
}
while(next!=null) {
if(pre.val==pre.next.val) {
pre.next = pre.next.next;
}
else {
pre = pre.next;
}
next = next.next;
}
return head;
}
看了题解发现可以用递归来做:
public ListNode deleteDuplicates(ListNode head) {
//如果头节点为空就说明链表为空,不用比较;
//如果头节点下一个为空就说明此链表只有一个节点,不用比较
if(head==null||head.next == null) {
return head;
}
//
head.next = deleteDuplicates(head.next);
if(head.val==head.next.val) {
head = head.next;
}
return head;
}
对比起来递归的简单多了……