IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 单向链表—— Java实现 -> 正文阅读

[数据结构与算法]单向链表—— Java实现

package com.muluo.linkedList;

public class SingleLinkedList<E> {

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

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

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

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

		@Override
		public String toString() {
			return this.e + "";
		}
	}

	private Node dummyHead;
	private int size;

	public SingleLinkedList() {
//		head = null;
		dummyHead = new Node(null, null);
		size = 0;
	}

	public void reverse() {
		Node cur = dummyHead.next;
//		将第二个元素放到第一个元素的后面
		Node next = cur.next;

		Node reverseNode = new Node();
		while (cur != null) {
			next = cur.next;
			cur.next = reverseNode.next;
			reverseNode.next = cur;
			cur = next;
		}
		dummyHead = reverseNode;
	}

	/**
	 * 获取链表的长度
	 * 
	 * @return
	 */
	public int getSize() {
		return size;
	}

	/**
	 * 返回移除的元素
	 * 
	 * @param index
	 * @return
	 */
	public E remove(int index) {
		if (index < 0 || index > size) {
			System.out.println("添加失败,下标违规");
		}
		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 (E) retNode.e;
	}

	/**
	 * 移除链表最后一个元素
	 * 
	 * @return
	 */
	public E removeLast() {
		return remove(size - 1);
	}

	/**
	 * 移除第一个元素并返回
	 */
	public E removeFirst() {
		return remove(0);
	}

	/**
	 * 判断某个元素是否在链表中
	 * 
	 * @param num
	 * @return
	 */
	public boolean contains(E e) {
		Node cur = dummyHead;
		while (cur.next != null) {
			if (cur.e == e) {
				return true;
			}
			cur = cur.next;
		}
		return false;
	}

	/**
	 * 判断是否为空
	 * 
	 * @return
	 */
	public boolean isEmpty() {
		return size == 0;
	}

	public void addFirst(E e) {
//		Node node = new Node(num);
//		node.next = head;
//		head = node;
//		size++;
		add(0, e);
	}

	/**
	 * 任意位置添加
	 * 
	 * @param index
	 * @param num
	 */
	public void add(int index, E e) {
		if (index < 0 || index > size) {
			System.out.println("添加失败,下标违规");
		}

		// 头结点为空,则可以创建一个虚拟头结点

//		if (index == 0) {
//			addFirst(num);
//		} else {
		Node prev = dummyHead;
		for (int i = 0; i < index; i++) {
			prev = prev.next;
		}

//			Node node = new Node(num);
//			node.next = prev.next;
//			prev.next = node;
		prev.next = new Node(e, prev.next);
		size++;
//		}
	}

	/**
	 * 尾部添加元素
	 * 
	 * @param num
	 */
	public void addLast(E e) {
		add(size, e);
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		Node cur = dummyHead.next;
		while (cur != null) {
			builder.append(cur + "->");
			cur = cur.next;
		}
		builder.append("NULL");
		return builder.toString();
	}
}

主测试类

package com.muluo.linkedList;

public class MainSingleLinkedLista {
	public static void main(String[] args) {
		SingleLinkedList<Integer> singleLinkedList = new SingleLinkedList<>();
		singleLinkedList.addFirst(1);
		singleLinkedList.addLast(2);
		singleLinkedList.addLast(3);
		singleLinkedList.addLast(4);

		System.out.println(singleLinkedList.toString());
		singleLinkedList.add(2, 6);
		System.out.println(singleLinkedList.toString());

		System.out.println(singleLinkedList.contains(3));
		System.out.println(singleLinkedList.toString());

		System.out.println(singleLinkedList.remove(2));
		System.out.println(singleLinkedList.toString());

		System.out.println(singleLinkedList.removeFirst());
		System.out.println(singleLinkedList.toString());

		System.out.println(singleLinkedList.removeLast());
		System.out.println(singleLinkedList.toString());

		System.out.println("===反转===");
		singleLinkedList.reverse();
		System.out.println(singleLinkedList.toString());
	}
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 16:00:39  更:2021-09-20 16:03:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 10:49:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码