链表操作+排序---Java

本文介绍了一个简单的链表实现,包括节点添加、插入、删除及排序等基本操作,并通过示例展示了这些功能的具体应用。

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

public class Node {
	//结点类
	Node next;//指针域
	int data;//数据域
	Node(int data)
	{
		this.data=data;
		this.next=null;
	}
}


package javawork;

public class List {
	//链表类
	Node head;//头结点
	List()
	{
		head=new Node(0);//头结点的数据域存储链表的长度
	}
	//在链表的最后添加结点
	public void addNode(int data)
	{
		Node temp=head;
		while(temp.next!=null)
			temp=temp.next;
		head.data++;//链表的长度加一
		Node add=new Node(data);
		temp.next=add;
	}
	
	//在链表的第index个位置之前添加结点
	public boolean insertNode(int index,int data)
	{
		Node temp=head;
		int length=0;
		while(length<index-1 && temp!=null)
		{
			length++;
			temp=temp.next;
		}
		if(length>index-1 || temp==null)
		{
			System.out.println("插入位置失败!");
			return false;
		}
		head.data++;//链表长度加一
		Node flag=new Node(data);
		flag.next=temp.next;//插入结点
		temp.next=flag;
		return true;
	}
	//删除链表第index个位置的结点
	public boolean deleteNode(int index)
	{
		Node temp=head;
		int length=0;
		while(length<index-1 && temp.next!=null)
		{
			length++;
			temp=temp.next;
		}
		if(length>index-1 || temp.next==null)
		{
			System.out.println("删除失败!");
			return false;
		}
		head.data--;
		Node flag=temp.next;
		System.out.println("删除的结点的值为"+flag.data);
		temp.next=flag.next;
		return true;
	}
	//打印链表
	public void printList()
	{
		Node temp=head.next;
		while(temp!=null)
		{
			System.out.print(temp.data+"  ");
			temp=temp.next;
		}
		System.out.println();
	}
	//获取链表的长度
	public int lengthNode()
	{
		return head.data;
	}
	//给链表排序
	public void sort()
	{
		Node p;//p存放下一个结点
		int temp;
		//这里利用冒泡排序法根据长度确定比较的轮数,比较的轮数比链表的长度少1
		int flag=lengthNode()-1;
		while(flag>=0)
		{
			p=head.next;//冒泡法的思想,从第一个结点值与后面结点的值开始比较
			while(p.next!=null)//相邻两个结点的值依次比较,让较大的数较大的泡冒到后面去
			{
				if(p.data>p.next.data)
				{
					temp=p.data;
					p.data=p.next.data;
					p.next.data=temp;
				}
				p=p.next;
			}
			flag--;
		}
	}
}


package javawork;

public class NodeMain {

	public static void main(String args[])
	{
		List link=new List();
		int a[]= {33,56,21,9,100,101,78,1111,334,55};
		for(int i=0;i<a.length;i++)
			link.addNode(a[i]);//从链表后面开始插入
		
		System.out.println("排序前:");
		link.printList();//打印结果看一下有没有problem
		
		link.sort();//排序
		System.out.println("排序后:");
		link.printList();
		
		System.out.println("在第6个位置插入18");
		link.insertNode(6, 18);
		link.printList();
		//插入后排序
		link.sort();
		link.printList();
		
		System.out.println("删除第3个位置的结点!");
		link.deleteNode(3);
		link.printList();
		//删除后排序,当然顺序不变
		link.sort();
		link.printList();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值