删除链表重复元素
题目1. 保留一个重复元素
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode slow=head, fast = head.next;
while(fast!=null){
if(slow.val==fast.val){
slow.next = fast.next;
fast = fast.next;
}else{
slow = slow.next;
fast = fast.next;
}
}
return head;
}
}
题目2. 保留重复元素,一个都不保留,可以用哑节点。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode pre = new ListNode(0);
pre.next = head;
ListNode tpre = pre;
while (head!=null){
if(head.next!=null&&head.val==head.next.val){
while (head.next!=null&&head.val==head.next.val){
head = head.next;
}
tpre.next = head.next;
head = head.next;
}else {
tpre = tpre.next;
head = head.next;
}
}
return pre.next;
}
}