leetcode第83题:删除排序链表中的重复元素

链接: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;
		}
	}
}

性能表现优秀:
性能表现
注意回顾本题中对于链表的操作、指针的设计等问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值