Java ListNode链表

目录

ListNode链表的基本结构

创建链表和遍历链表

插入节点

替换节点

删除节点

ListNode链表的注意事项


ListNode链表的基本结构

链表:链表是一种数据结构,由数据和指针构成,链表的指针指向下一个节点的位置。

 Java ListNode链表:就是用Java自定义实现的链表结构。

由于Java中没有指针的概念,Java中的引用就类似于C语言中的指针的意思。

Java ListNode的基本结构:

public class ListNode {        //类名 :Java类就是一种自定义的数据结构
    int val;                   //数据 :节点数据 
    ListNode next;            //对象 :引用下一个节点对象。在Java中没有指针的概念,Java中的引用和C语言的指针类似
}

添加构造方法方便初始化(给链表赋值的方法):

public class ListNode {        //类名 :Java类就是一种自定义的数据结构
    int val;            //数据 :节点数据 
    ListNode next;      //对象 :引用下一个节点对象。在Java中没有指针的概念,Java中的引用和C语言的指针类似
    
    ListNode(int val){  //构造方法 :构造方法和类名相同   
        this.val=val;     //把接收的参数赋值给当前类的val变量
    }
}

创建链表和遍历链表

public static void main(String[] args) {
		ListNode l1 = new ListNode(0); //创建链表的首节点,赋值为0
		//注意l1是首节点,而不是链表的名字
		ListNode p = l1 ;//声明一个变量在移动过程中充当节点
		p.next = new ListNode(1);	//创建链表的下一个节点,并赋值
		p = p.next;		//将指针的位置指向当前节点
		for(int i=2;i<=10;i++) {    
   			ListNode l2 = new ListNode(i);    //生成新的节点
			p.next = l2 ;    //把新节点连起来
			p = p.next;        //当前节点往后移动
		}
		p = l1;    //重新赋值让指针指向首节点
		print(p);    //打印输出
	}
    //打印输出方法
	private static void print(ListNode p) {
		while(p!=null) {
			System.out.println(p.val);
			p = p.next;
		}
		System.out.println();
		
	}

插入节点

 在0,1,2,3的链表中2和3的位置中间添加一个新的节点7:

public static void main(String[] args) {
		ListNode l1 = new ListNode(0); //创建链表的首节点,赋值为0
		//注意l1是首节点,而不是链表的名字
		ListNode p = l1 ;//声明一个变量在移动过程中充当节点
		p.next = new ListNode(1);	//创建链表的下一个节点,并赋值
		p = p.next;	//将指针的位置指向当前节点
		p.next = new ListNode(2);
		p = p.next;
		p.next = new ListNode(3);//此时指针还在值为2的节点的地方
//插入节点,在2和3中插入一个值为7的节点
		ListNode newNode = new ListNode(7);//生成一个新的节点
		ListNode node = p.next; //将值为3的节点的位置存起来
		p.next = newNode ;//插入新节点
		newNode.next = node;//新节点的下一个节点指向之前保存的节点
	}

替换节点

  在0,1,2,3的链表中将2替换成7:

public static void main(String[] args) {
		ListNode l1 = new ListNode(0); //创建链表的首节点,赋值为0
		//注意l1是首节点,而不是链表的名字
		ListNode p = l1 ;//声明一个变量在移动过程中充当节点
		p.next = new ListNode(1);	//创建链表的下一个节点,并赋值
		p = p.next;	//将指针的位置指向当前节点
		p.next = new ListNode(2);
		p = p.next;
		p.next = new ListNode(3);//此时指针还在值为2的节点的地方
		p = p.next;
		p = l1;
		print(p);
//替换节点
		ListNode newNode = new ListNode(7);//创建一个新的节点,估值为7
		while(p!=null) {
			if(p.val==1) {
				ListNode node = p.next.next;//将需要替换的下一个节点的位置保存起来
				p.next.next = null;//被替换的节点,指向为空,等待被Java垃圾回收
				p.next = newNode ;//插入新节点
				newNode.next = node;//新节点的下一个节点指向之前保存的节点
			}
			p = p.next;
		}
		p = l1;
		print(p);
	}

//打印输出方法
	private static void print(ListNode p) {
		while(p!=null) {
			System.out.println(p.val);
			p = p.next;
		}
		System.out.println();
	}

删除节点

 删除链表0,1,2,3中的2节点

public static void main(String[] args) {
		ListNode l1 = new ListNode(0); //创建链表的首节点,赋值为0
		//注意l1是首节点,而不是链表的名字
		ListNode p = l1 ;//声明一个变量在移动过程中充当节点
		p.next = new ListNode(1);	//创建链表的下一个节点,并赋值
		p = p.next;	//将指针的位置指向当前节点
		p.next = new ListNode(2);
		p = p.next;
		p.next = new ListNode(3);//此时指针还在值为2的节点的地方
		p = p.next;
		p = l1;
		print(p);
//删除节点
		while(p!=null) {
			if(p.val==1) {
				ListNode node = p.next.next; //将要删除节点的下一个节点位置存起来
				p.next.next = null ;//被删除节点指向为空,等待java垃圾回收
				p.next = node ;//指向要删除节点的下一个节点
			}
			p = p.next;
		}
		p = l1;
		print(p);
	}

	private static void print(ListNode p) {
		while(p!=null) {
			System.out.println(p.val);
			p = p.next;
		}
		System.out.println();
	}

ListNode链表的注意事项

1、定义链表时,ListNode l1 = new ListNode(0); 该语句表示,创建了一个链表,链表的首节点为0,其中l1代表的是首节点,而不是链表的名字。

2、不需要定义链表的长度。

3、赋值语句为xx.next = new ListNode(4);此时指针的位置还在上一个节点的位置。

可以参考力扣第二题(两数相加)学习

2.两数相加(LeetCode每日打卡)_m0_51457307的博客-CSDN博客

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值