实现一个简单的双链表

小编 2026-07-01 阅读:363 评论:0
冬至到了,这几天在复习,对于数据结构,只是重新温故了一下链表的知识,在老朱的帮助下,算是对链表有个大致的了解 双链表的实现 //双链表操作 //需要借助两个标记结点,一个作为头结点,一个作...

冬至到了,这几天在复习,对于数据结构,只是重新温故了一下链表的知识,在老朱的帮助下,算是对链表有个大致的了解

双链表的实现

//双链表操作
//需要借助两个标记结点,一个作为头结点,一个作为尾结点
import java.util.ArrayList;
import java.util.LinkedList;
public class MyLinklist
{
	private static Node beginMaker=new Node(-1,null,null);//头节点
	private static Node endMaker=new Node(-1,beginMaker,null);//尾节点
	static
	{
		beginMaker.next=endMaker;
	}
	private static class Node
	{
		//嵌套的Node类
		public Node(int d,Node p,Node  n)
		{
			data=d;//数据域
			prev=p;//前趋指针
			next=n;//后继指针
		}
		
		public Node(int d)
		{
			data=d;
		}

		public int 	 data;//数据域
		public Node  prev;//前趋指针
		public Node  next;//后继

	}
	//清除结点
	private void doClear()
	{
		beginMaker= new Node(-1,null,null);
		endMaker= new Node(-1, beginMaker,null);//Node.prev=beginMaker整个链表只剩下beginMaker和endMaker
		beginMaker.next=endMaker;
	}
	
	//正序输出
	private void display()
	{
		System.out.println(\"正序输出!\");
		Node p=beginMaker;
		while(p!=null)
		{
			System.out.println(p.data);
			p=p.next;
		}
	}
	//逆序输出!
	private void reversedisplay()
	{
		System.out.println(\"逆序输出!\");
		Node p=endMaker;
		while(p!=null)
		{
			System.out.println(p.data);
			p=p.prev;
		}
	}
	
	//在尾部追加结点
	private void addBefore(Node p,int x)
	{
		Node newNode=new Node(x,p.prev,p);
		newNode.prev.next=newNode;
		p.prev=newNode;
	}


	//在某个结点前增加结点
	private void add(int key,int x)
	{
		System.out.println(\"开始在结点前追加!\");
		Node node=new Node(key);
		Node p=beginMaker;
		while(p.next!=null)
		{
			if(p.next.data==x)
			{
				node.next=p.next;
				node.prev=p;
				p.next.prev=node;
				p.next=node;
				return;
			}
			p=p.next;				
		}
		System.out.println(\"找不到这个节点,不能增加\");
	}
	//删除结点
	private void delete(int key)
	{
		System.out.println(\"开始删除!\");
		Node p=beginMaker;//头指针
		while(p.next!=null)
		{
			if(p.data==key)
			{
				p.prev.next=p.next;
				p.next.prev=p.prev;
				System.out.println(\"删除成功!删除了\"+key);
				System.out.println(p.data);
				p.next=null;
				p.prev=null;
				System.gc();
				return;
			}
			p=p.next;
			
		}
		System.out.println(\"找不到此节点,删除失败!\");
	}
	
	
	public static void main(String[] args) {
			MyLinklist l=new MyLinklist();
			//在此处创建结点
			for(int i=0;i<10;i++)
				l.addBefore(endMaker, i);
			l.delete(5);//删除值为5的结点
			l.display();
			l.add(5,6);//在值为6的结点前追加结点
			l.display();
		}
}

今天每位考研的学长学姐,你们都是最棒的~!364天了,加油!

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表