题目描述:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
注意:
1、链表是有序的;
2、进行操作后的原链表中的重复元素要保留一个
示例:
思路:
对一个排序链表,删除所有重复的元素,使得每个元素只出现一次,可以分为两种情况讨论:
1、若头结点为空或者只有一个结点,直接返回head ;
2、若为一般情况,由于链表是有序的,所以可以根据比较当前结点和下一个结点的值,来判断链表中元素是否重复,若值相等,则更改当前结点的 next 指针,使它跳过下一个结点直接指向下下一个结点(cur.next = cur.next.next);若不相等,那么直接让需要比较的结点向后移(cur = cur.next)即可
需要注意的是:在这里,由于可能更改当前结点的 next 指针,使它跳过下一个结点直接指向下下一个结点,所以循环条件就不仅仅是 head !=null;还要再加上 head.next !=null ,即 head !=null && head.next !=null
代码:
/**
* Definition for singly-linked list.
* public class Node {
* int value;
* Node next;
* Node(int x) { val = x; }
* }
*/
class Solution {
public Node deleteDuplicates(Node head) {
if(head == null || head.next == null){
return head;
}
Node cur = head;
while(cur != null&&cur.next != null){
if(cur.value == cur.next.value){
cur.next = cur.next.next;
}else{
cur = cur.next;
}
}
return head;
}
}