链表的增删改查操作


public class LinkedList<E> {
	private class Node {
		public E e;
		public Node next;

		public Node(E e, Node next) {
			this.e = e;
			this.next = next;
		}

		public Node(E e) {
			this(e, null);
		}

		public Node() {
			this(null, null);
		}

		public String toString() {
			return e.toString();
		}
	}

	private Node dummyhead;
	private int size;

	public LinkedList() {
		dummyhead = new Node(null, null);
		size = 0;
	}

	public int getSize() {
		return size;
	}

	public boolean isEmpty() {
		return size == 0;
	}

	// 在链表头添加新的元素e
	public void addFirst(E e) {
//		Node node = new Node(e);
//		node.next = head;
//		head = node;
		add(0, e);
	}

	// 在链表的index(0-based)位置添加新的元素e
	// 在链表中不是一个常用的操作,练习用: )
	public void add(int index, E e) {
		if (index < 0 || index > size) {
			throw new IllegalArgumentException("Add failed. Illegal index.");
		}

		Node prev = dummyhead;
		for (int i = 0; i < index; i++) {
			prev = prev.next;
		}
//			Node node = new Node(e);
//			node.next = prev.next;
//			prev.next = node;
		prev.next = new Node(e, prev.next);
		size++;
	}

	public void addLast(E e) {
		add(size, e);
	}

	// 获得链表的第index(0-based)个位置的元素
	// 在链表中不是一个常用的操作,练习用:)
	public E get(int index) {
		if (index < 0 || index >= size) {
			throw new IllegalArgumentException("Get failed. Illegal index.");
		}
		Node cur = dummyhead.next;
		for (int i = 0; i < index; i++) {
			cur = cur.next;
		}
		return cur.e;
	}

	// 获得链表的第一个元素
	public E getFirst() {
		return get(0);
	}

	public E getLast() {
		return get(size - 1);
	}

	// 修改链表的第index元素(0-based)个位置的元素为e
	// 在链表中不是一个常用的操作,练习用: )
	public void set(int index, E e) {
		if (index < 0 || index >= size) {
			throw new IllegalArgumentException("Set failed. Illegal index.");
		}
		Node cur = dummyhead.next;
		for (int i = 0; i < index; i++) {
			cur = cur.next;
		}
		cur.e = e;
	}

	// 查找链表中是否有元素e
	public boolean contains(E e) {
		Node cur = dummyhead.next;
		while (cur != null) {
			if (cur.e.equals(e)) {
				return true;
			}
			cur = cur.next;
		}
		return false;
	}

	// 从链表中删除index(0-based)位置的元素,返回删除的元素
	// 在链表中不是一个常用的操作,练习用: )
	public E remove(int index) {
		if (index < 0 || index >= size) {
			throw new IllegalArgumentException("Remove failed. Illegal index.");
		}
		Node prev = dummyhead;
		for (int i = 0; i < index; i++) {
			prev = prev.next;
		}
		Node retNode = prev.next;
		prev.next = retNode.next;
		retNode.next = null;
		size--;
		return retNode.e;
	}

	public E removeFirst() {
		return remove(0);
	}

	public E removeLast() {
		return remove(size - 1);
	}

	// 从链表中删除元素e
	public void removeElement(E e) {
		Node prev = dummyhead;
		while (prev.next != null) {
			if (prev.next.e.equals(e))
				break;
			prev = prev.next;
		}
		if (prev.next != null) {
			Node delNode = prev.next;
			prev.next = delNode.next;
			delNode.next = null;
		}
	}

	public String toString() {
		StringBuilder res = new StringBuilder();
		Node cur = dummyhead.next;
		while (cur != null) {
			res.append(cur + "->");
			cur = cur.next;
		}
//		for (Node cur = dummyhead.next; cur != null; cur = cur.next) {
//			res.append(cur + "->");
//		}
		res.append("NULL");
		return res.toString();
	}

}

测试代码:


public class Main {
	public static void main(String[] args) {
		LinkedList<Integer> linkedList1 = new LinkedList<>();
		for (int i = 0; i < 5; i++) {
			linkedList1.addFirst(i);
			System.out.println(linkedList1.toString());
		}
		linkedList1.add(2, 666);
		System.out.println(linkedList1.toString());
		linkedList1.remove(2);
		System.out.println(linkedList1);
		linkedList1.removeFirst();
		System.out.println(linkedList1);
		linkedList1.removeLast();
		System.out.println(linkedList1);
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值