删除链表中重复的结点
删除链表中重复的结点
http://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
自己想到的是三指针解法,自己倒是没想到递归解。
三指针:
public class Solution {
public ListNode deleteDuplication(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode h = new ListNode(-1); // 头结点,用于返回结果
h.next = head;
ListNode pre = h, cur = head, next; // 三指针
while (cur != null && cur.next != null) {
next = cur.next;
if (cur.val == next.val) {
while (next != null && next.val == cur.val) {
next = next.next;
}
pre.next = next;
cur = pre.next;
} else {
pre = cur;
cur = next;
}
}
return h.next;
}
} 排行榜里面的递归解太巧妙了,这里学习记录:
public class Solution {
public ListNode deleteDuplication(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode next = head.next;
if (head.val == next.val) { // 重复发生在起始节点的时候
while (next != null && head.val == next.val) {
next = next.next;
}
return deleteDuplication(next);
} else {
// 起始节点没有重复的时候
head.next = deleteDuplication(head.next);
return head;
}
}
} 
查看29道真题和解析