java数据结构(链表)操作

package link;
/**
 * 链表进行操作(Java实现)
 * @author 欸嘿
 *
 */

public class LinkDemo {
	//头节点指针
	private Node head;
	//尾节点指针
	private Node last;
	//链表的实际长度
	private int size;
	/**
	 * 链表插入元素
	 */
	public void insert(int data,int index) {
		if(index<0||index>size) {
			throw new IndexOutOfBoundsException("超出链表范围");
		}
		Node insertedNode=new Node(data);
		if(size==0)
		{
			//空链表
			head=insertedNode;
			last=insertedNode;
		}
		else if(index==0)
		{
			//插入头部
			insertedNode.next=head;
			head=insertedNode;
		}
		else if(size==index) {
			//插入尾部
			last.next=insertedNode;
			last=insertedNode;
		}
		else {
			//插入中间
			Node prevNode=get(index-1);
			insertedNode.next=prevNode.next;
			prevNode.next=insertedNode;
		}
		size++;
	}
	/**
	 * 链表的删除元素
	 * 
	 */
	public Node remove(int index) {
		if(index<0||index>=size) {
			throw new IndexOutOfBoundsException("超出链表节点范围");
		}
		Node removedNode=null;
		if(index==0) {
			//删除头节点
			removedNode=head;
			head=head.next;
		}else if(index==size-1) {
			//删除尾节点
			Node prevNode=get(index-1);
			removedNode=prevNode.next;
			prevNode.next=null;
			last=prevNode;
		}
		size--;
		return removedNode;
	}
	/**
	 * 链表查找元素
	 */
	public Node get(int index) {
		if(index<0||index>=size) {
			throw new IndexOutOfBoundsException("超出链表节点范围");
		}
		Node temp=head;
		for (int i = 0; i < index; i++) {
			temp=temp.next;
		}
		return temp;
	}
	//链表的输出
	public void output() {
		Node temp=head;
		while(temp!=null) {
			System.out.println(temp.data);
			temp=temp.next;
		}
	}
	
private static	class Node{
		int data;
		Node next;
		Node(int data){
			this.data =data;
		}
	}
public static void main(String[] args) {
	LinkDemo myLinkedList=new LinkDemo();
	myLinkedList.insert(3, 0);
	myLinkedList.insert(7, 1);
	myLinkedList.insert(9, 2);
	myLinkedList.insert(5, 3);
	myLinkedList.insert(6, 1);
	myLinkedList.remove(0);
	myLinkedList.output();
}
	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值