- 题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
- 示例
- 示例 1:
输入: 1->1->2
输出: 1->2 - 示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
- 思路分析
遍历链表,跳过重复的元素。自己写一下指针该怎么改变就知道了。
- JAVA实现
/**
* 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 newHead = head; //新链表的头节点
ListNode last = head; //用来连接新链表,指向新链表的最后一个节点
while(head!=null && head.next != null) {
head = head.next;
if(head.val != last.val) { //当前值不等于新链表的最后一个节点时,该值可以加入链表
last.next = head; //将该值加入链表
last = last.next; //保证last指向新链表的最后一个节点
}
}
if(last != null) last.next = null; //如果新链表不为空,last是最后一个节点,因此要保证下一个元素为空
return newHead;
}
}