写在前面
本题与下面这道题目极其相似,读者可对比阅读,加深印象
题目博客连接
学习目标:
目标:熟练运用Java所学知识
学习内容:
本文内容:使用Java实现:删除排序链表中的重复元素
题目描述:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
解题思路
- 首先创建新的链表(带傀儡),用于存放返回结果
ListNode newHead=new ListNode(0);//创建带傀儡的新链表
ListNode newTail=newHead;//记录链表的尾结点
- 通过循环,逐个的判断当前结点的val是否与下一个结点的相同
while(cur!=null){
//判断当前结点与下一个结点是否相同
if(cur.next!=null&&cur.val==cur.next.val){
//当下一个结点与当前结点相同时,跳过当前结点,直到下一个节点与当前结点不相同
while(cur!=null&&cur.next!=null&&cur.val==cur.next.val){
cur=cur.next;
}
}else{
//将只出现一次的结点放入新链表
newTail.next=new ListNode(cur.val);
newTail=newTail.next;
cur=cur.next;
}
}
实现代码
public static ListNode deleteDuplicates(ListNode head) {
ListNode cur=head;
ListNode newHead=new ListNode(0);//创建带傀儡的新链表
ListNode newTail=newHead;//记录链表的尾结点
while(cur!=null){
//判断当前结点与下一个结点是否相同
if(cur.next!=null&&cur.val==cur.next.val){
//当下一个结点与当前结点相同时,跳过当前结点,直到下一个节点与当前结点不相同
while(cur!=null&&cur.next!=null&&cur.val==cur.next.val){
cur=cur.next;
}
}else{
//将只出现一次的结点放入新链表
newTail.next=new ListNode(cur.val);
newTail=newTail.next;
cur=cur.next;
}
}
}