链接:remove-duplicates-from-sorted-list
题目描述:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
代码如下:
package pid83;
public class Solution {
public static ListNode deleteDuplicates(ListNode head){
if(head == null){
return null;
}
/*
* 本题为有序链表,比较简单
*/
ListNode res = new ListNode(head.val);//res记录结果链表头结点位置
ListNode p = res;//充当当前结果链表中的最后一个结点
ListNode temp;
/*
* 存储一个临时的、无后继的结点,避免把一个链表缀在结果链表后面的情况。
* 逻辑上更清晰,也能有效处理链表到达尾部的麻烦情况。
*/
while(head!=null){
if(head.val != p.val){
//生成一个结点
temp = new ListNode(head.val);
temp.next=null;
p.next = temp;
head = head.next;
p = p.next;
}else{
head = head.next;
}
}
return res;
}
public static void main(String[] args) {
/*构造链表*/
ListNode n1 = new ListNode(1);
ListNode n2 = new ListNode(2);
ListNode n3 = new ListNode(2);
ListNode n4 = new ListNode(5);
ListNode n5 = new ListNode(5);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
ListNode res = deleteDuplicates(n1);
while(res!=null){
System.out.print(res.val+" ");
res = res.next;
}
}
}
性能表现优秀:
注意回顾本题中对于链表的操作、指针的设计等问题。