题目
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例
给出 1->1->2->null,返回 1->2->null
给出 1->1->2->3->3->null,返回 1->2->3->null
解题
加一个头结点
链表有序,找到不相等的时候,删除中间结点
两两比较是否相同进行删除
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param ListNode head is the head of the linked list
* @return: ListNode head of linked list
*/
public static ListNode deleteDuplicates(ListNode head) {
// write your code here
ListNode curHead = new ListNode(-1); // 定义头结点
curHead.next = head;
while(head!=null){
if(head.next!=null && head.val == head.next.val){ // 遇到相同元素删除
head.next = head.next.next;
}else
head = head.next;
}
return curHead.next;
}
}
删除多个的方式
只需修改上面的if语句
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param ListNode head is the head of the linked list
* @return: ListNode head of linked list
*/
public static ListNode deleteDuplicates(ListNode head) {
// write your code here
ListNode curHead = new ListNode(-1); // 定义头结点
curHead.next = head;
while(head!=null){
while(head.next!=null && head.val == head.next.val){ // 遇到相同元素删除
head.next = head.next.next;
}
head = head.next;
}
return curHead.next;
}
}