首页 > 编程 > Java > 正文

java 单向链表的基本操作

2019-11-06 08:55:29
字体:
来源:转载
供稿:网友

    今天学习了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());	}}运行结果:宋江->卢俊义->吴用->林冲->李逵->燕青->65-1宋江->卢俊义->吴用->林冲->花荣->李逵->燕青->宋江->卢俊义->林冲->花荣->李逵->燕青->6


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表