Problem:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Return the linked list sorted as well.
Example 1:
Input: 1->2->3->3->4->4->5 Output: 1->2->5Example 2:
Input: 1->1->1->2->3 Output: 2->3
Analysis:
本题的思路是寻找相同的节点,由于链表是有序的,因此只需要寻找相邻的节点,判断其是否相同即可。代码如下:
Code:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode res = new ListNode(-1);
ListNode pre = res;
ListNode p = head;
int value = head.val;
p = p.next;
boolean flag = false;
while(p != null) {
if(value != p.val) {
ListNode temp = new ListNode(value);
pre.next = temp;
pre = pre.next;
value = p.val;
p = p.next;
flag = true;
continue;
} else {
while(p != null && value == p.val) {
p = p.next;
}
if(p != null) {
value = p.val;
p = p.next;
flag = true;
} else {
flag = false;
}
}
}
if(flag == true) {
ListNode temp = new ListNode(value);
pre.next = temp;
pre = pre.next;
}
return res.next;
}
}