java链表和递归算法学习

本文介绍了链表数据结构的特点及其实现,并通过一个具体的Java示例展示了如何使用递归算法来解决阶乘问题,同时提供了完整的链表实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结结构之链表



链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会

按线性的顺序存储数据,而是在每一个节点里存下一个节点的指针(Pointer)

链表与数组区别

链表不适合遍历,但是适合灵活的(插入,删除等)操作






递归算法:直接或间接调用自身的算法


注:递归一定要有出口,递归过多会造成栈内存溢出(当N很大时)



public class test_13
{
	public static void main(String[] args)
	{
		System.out.println(jieceng(5));
		System.out.println(jieceng_dg(5));
	}


//求阶层
public static int jieceng(int num)
{
	int sum = num;
	int i = num -1;
	 do
	 {
		 sum = sum*i;
		 i--;
	 }while(i>1);
	 return sum;
}

// 递归算法 ,节俭了代码
// 递归一定要有出口,递归过多会造成栈内存溢出
public static int jieceng_dg(int num)
{
	if (num==1)
		return 1;
	return num*jieceng_dg(num-1);
}
}


完整链表代码:

// 链表数据结构
// 适合用于频繁进行添加、插入、删除操作

public class test_13_lianbiao
{
	public static void main(String[] args)
	{
		  NodeManager nm = new NodeManager();
		  nm.addNode("1");
		  nm.addNode("2");
		  nm.addNode("3");
		  nm.addNode("4");
		  nm.addNode("5");
		  nm.addNode("6");
		  nm.printNode();
		  nm.delNode("4");
		  nm.printNode();
	}
}

//链表的节点管理类
class NodeManager
{
	private Node head;//头节点(根节点)
	
	public void addNode(String name)
	{
		if (head==null)
		{
			head = new Node(name);
		}
		else
		{
			head.add(name);
		}
	}
	public void delNode(String name)
	{
		if (head.getName().equals(name))
		{
			head=head.next;
		}
		else
		{
			head.delet(name);
		}
	}
	public void printNode()
	{
			if (head!=null)
			{
				System.out.print(head.getName()+"->");
				head.print();
				System.out.println();
			}
	}
	
	// 表示每个节点对象
	class Node 
	{
		private String name;
		private Node next;// 表示当前结点的下一个节点
		public String getName()
		{
			return name;
		}
		public Node(String name)
		{
			this.name=name;
		}
		public void add(String name)//添加节点
		{
			if(this.next==null)
			{
				this.next = new Node(name);
			}
			else
			{
				this.next.add(name);//体现出递归调用
			}
		}
		public void delet(String name)//删除节点
		{
			if (this.next!=null)
			{
				if (this.next.name.equals(name))
				{
					this.next=this.next.next;					
				}
				else
				{
					this.next.delet(name);
				}
			}
		}
		public void print()// 打印所有节点
		{
			if (this.next!=null)
			{
				System.out.print(this.next.getName()+"->");
				this.next.print();
			}
		}
	}
}

跑出结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值