题目
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
代码
/**
* 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 cur = head;
//哑巴节点,始终指向头节点
ListNode dummy = new ListNode(0);
dummy.next = head;
//前驱节点,用来串联链表
ListNode pre = dummy;
while(cur != null){
//循环,直到当前节点的val值不等于下一个节点,否则都废弃,只保留最后一个重复的节点
while(cur != null && cur.next != null && cur.val == cur.next.val){
cur = cur.next;
}
//串联链表
pre.next = cur;
pre = cur;
cur = cur.next;
}
//哑巴节点的下一个节点就是新链表的头节点
return dummy.next;
}
}
以上。