java算法(删除排序链表中的重复元素 )
问题
- 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
解决
/**
* 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 dummyHead = new ListNode(0); //创建虚拟头结点
// dummyHead.next = head; //将head移到虚拟头结点后
// ListNode prev = dummyHead; //将虚拟头结点值赋予(链表)变量1
// ListNode cur = prev.next; //将变量1下一个值赋予(链表)变量2
// while (cur != null) { //如果变量2不为空,进行while循环
// int curRepeatNum = 0; //创建一个“计数” 整数
// ListNode difNode = cur; //将变量2赋值给(链表)变量3
// // 找到和cur指向的结点值不同的结点
// while (difNode != null && difNode.val == cur.val) { //如果变量3不为空且变量3==变量2,进行while循环
// curRepeatNum++; //“计数”加一
// difNode = difNode.next; //讲过变量3移动到下一个节点
// }
// // 如果curRepeatNum的值大于1,则表示cur指向的结点重复出现了
// if (curRepeatNum > 1) { //如果“计数”>1(表示重复出现),进行if操作
// prev.next = difNode; //将变量3的值赋予变量1下一位节点
// }else { //否则
// // cur指向的结点没有重复出现,则将变量prev指向cur所指向的结点
// prev = cur; //将变量2的值赋予变量1
// }
// cur = difNode; //将变量3的值赋予变量2
// }
// return dummyHead.next; //返回虚拟链表
// }
// // head为已经创建好的链表
// // 若重复则后面一个必定与前面一个重复,则删除所有含有该数字的节点
// }
// 解法二:
class Solution{
public ListNode deleteDuplicates(ListNode head){
if(head==null){
return head;
} //如果head为空,则直接返回head
ListNode demmp=new ListNode(0,head); //创建虚拟头结点(哑节点),并且将节点位于head之前
ListNode cur=demmp; //创建节点变量
while(cur.next!=null&&cur.next.next!=null){
if(cur.next.val==cur.next.next.val){ //将重复节点删除
int x=cur.next.val;
while(cur.next!=null&&cur.next.val==x){
cur.next=cur.next.next;
}
}else{ //跳过不重复的节点
cur=cur.next;
}
}
return demmp.next; //输出最终链表
}
}
总结
- 解决此问题主要是结点的移动,以及删除重复结点:
if(cur.next.val==cur.next.next.val){ //将重复节点删除
int x=cur.next.val;
while(cur.next!=null&&cur.next.val==x){
cur.next=cur.next.next;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了