java 单向链表的基本操作

    今天学习了java中链表的知识,自己也动手实现了单向链表的相关操作,包括初始化、求表长、读链表节点、定位、插入、删除等等。

有错误欢迎大家指出并多多交流!

在 数据结构之链表增删查  这个包中定义一个Node类和一个Link类

package 数据结构之链表增删查;

public class Node {
	String name;// 数据域
	Node next;// 链域

	public Node() {
		this.name = "";
		next = null;

	}

	public Node(String name) {
		this.name = name;
		next = null;
	}

}

package 数据结构之链表增删查;


public class Link {
	Node head;// 头结点


	public Link() {
		head = new Node();// 初始化头结点
	}


	/*
	 * 添加节点,在链表的最后添加
	 */
	public void add(Node data) {
		Node temp = head;
		while (temp.next != null) {
			temp = temp.next;
		}
		temp.next = data;
	}


	/*
	 * 插入节点 在某个节点之后插入一个新的节点
	 */
	public void insert(Node data, String newname) {
		Node temp = head;
		while (temp.next != null) {
			if (temp.next.name.equals(data.name)) {
				Node newNode = new Node(newname);
				newNode.next = temp.next.next;
				temp.next.next = newNode;
				break;
			} else {
				temp = temp.next;
			}
		}
	} /*
	 * 删除节点
	 */


	public void delete(Node data) {
		Node temp = head;
		while (temp.next != null) {
			if (temp.next.name.equals(data.name)) {
				temp.next = temp.next.next;
				break;
			} else {
				temp = temp.next;
			}
		}
	}


	/*
	 * 计算链表长度
	 */
	public int size() {
		int len = 0;
		Node temp = head;
		while (temp.next != null) {
			len++;
			temp = temp.next;
		}
		return len;
	}


	/*
	 * 查找数据 返回该数据的位置,返回3说明此数据在链表的第3个节点处,-1为链表中无此数据
	 */
	public int serach(String name) {
		Node temp = head.next;
		int index = 0;
		while (temp != null) {
			if (temp.name.equals(name)) {
				index++;
				return index;
			}
			index++;
			temp = temp.next;
		}
		return -1;
	}


	/*
	 * 遍历链表
	 */
	public void display() {
		Node temp = head;
		while (temp.next != null) {
			System.out.print(temp.next.name + "->");
			temp = temp.next;
		}
		System.out.println();
	}


	public static void main(String[] args) {
		// 创建链表
		Link link = new Link();
		// 创建节点
		Node node1 = new Node("宋江");
		Node node2 = new Node("卢俊义");
		Node node3 = new Node("吴用");
		Node node4 = new Node("林冲");
		Node node5 = new Node("李逵");
		Node node6 = new Node("燕青");
		// 链表中添加数据节点
		link.add(node1);
		link.add(node2);
		link.add(node3);
		link.add(node4);
		link.add(node5);
		link.add(node6);
		link.display();// 遍历
		System.out.println(link.size());// 6,输出链表长度
		System.out.println(link.serach("李逵"));// 5
		System.out.println(link.serach("燕"));// 不存在,返回-1
		link.insert(node4, "花荣");// 在node4"林冲"之后添加"花荣"
		link.display();// 插入数据后遍历
		link.delete(node3);// 删除节点node3"吴用"
		link.display();// 删除之后再遍历链表
		System.out.println(link.size());
	}
}

运行结果:

宋江->卢俊义->吴用->林冲->李逵->燕青->
6
5
-1
宋江->卢俊义->吴用->林冲->花荣->李逵->燕青->
宋江->卢俊义->林冲->花荣->李逵->燕青->
6



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值