Java基础:数据结构,写一个简单的链表实现

class Node{
	int key;  // private 是私有的属性
	int value;
	Node next; // 
	
	public Node(int key, int value) {
		this.key = key;
		this.value = value;
		this.next = null;
	}
}

public class MyLinkList{
	private Node head; // 头节点 默认就是null
	public MyLinkList() {
		head = null; // 初始化头结点为null,创建空链表
	}
	public void addNode(int key, int value) {
		// 如果是空链表,
		if(head == null) {
			head = new Node(key, value);
		}else {
			Node current = head;
			// 找到最后一个结点
			while(current.next != null) {
				current = current.next;
			}
			System.out.println("尾结点是:" + current.key);
			System.out.println("追加结点是:" + key);
			current.next = new Node(key, value);
		}
	}
	
	public Node getNode(int key) {
		Node current = head;
		// 判断头为空的空
		if(head == null) {
			return null;
		}
		if(current.key == key) {
			return head;
		}else {
			current = head.next;
			while(current != null) {
				if(current.key == key) {
					break;
				}
				// 如果key不匹配,继续找下一个节点
				current = current.next;
			}
			return current;
		}
	}
	
	public boolean delNode(int key) {
		Node current= head;
		Node parent;   // 记录需要被删除的节点的前一个节点
		
		if(head == null) {
			return false;
		}else if(head.key == key) { // 如果要删除的节点就是头节点
			head = head.next;
			return true;
		}else { // 节点在中间的情况
			parent = current;
			current = current.next;
			while(current != null) {
				if(current.key == key) {
					break;
				}
				// 如果当前节点不是要删除的节点,继续往后找
				parent = current;
				current = current.next;
			}
			if(current != null) {
				parent.next = current.next;
				return true;
			}else {
				return false;
			}
		}
	}
	
	public boolean insertNode(Node newNode, int index) {
		// index就是插入到第几个节点的位置,0->第一个节点 1->第二个节点 2->第三个几点
		int i = 0;
		Node current = head;
		Node parent;
		if(index == 0) {
			newNode.next = head;
			return true;
		}else {
			parent = current;
			current = current.next;
			i++;
			while(current != null) {
				if(index == i) {
					break;
				}
				parent = current;
				current = current.next;
				i++;
			}
			if(index == i) {
				parent.next = newNode;
				newNode.next = current;
				return true;
			}else {
				return false;
			}
		}
	}
	
	public void showLink() {
		Node current = head;
		while(current!= null) {
			System.out.println(current.key + ":" + current.value);
			current = current.next;
		}
	}
	
	public static void main(String[] args) {
		MyLinkList myLink = new MyLinkList();
		
		myLink.addNode(11, 1);
		myLink.addNode(2, 2);
		myLink.addNode(33, 3);
		myLink.addNode(4, 4);
		
		Node node = myLink.getNode(11);
		if(node != null) {
			System.out.println(node.key + ":" + node.value);
		}else {
			System.out.println("不存在该节点!");
		}
		
		// 删除节点
		boolean result = myLink.delNode(33);
		System.out.println(result);
		myLink.showLink();
		
		myLink.insertNode(new Node(100,100), 1);
		myLink.showLink();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值