ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java实现双向链表

2020-02-27 19:39:51  阅读:254  来源: 互联网

标签:Node index Java temp twl next 链表 双向 prev


public class TwoWayList<T> {

	private class Node{
		T data;
		Node next = null;
		Node prev = null;
		public Node(T t) {
			this.data = t;
		}
	}
	
	private Node head;
	private int len;
	
	public TwoWayList() {
		this.head = new Node(null);
		this.len = 0;
	}
	
	//获取第index个节点
	public Node getNode(int index) {
		Node temp = head;
		for(int i=0; i<index; i++) {
			temp = temp.next;
		}
		return temp;
	}
	
	//向尾部添加节点
	public void addTail(T t) {
		Node temp = new Node(t);
		Node last = getNode(len);
		last.next = temp;
		temp.prev = last;
		len++;
	}
	//转换为循环链表
	public void toCircular() {
		Node last = getNode(len);
		last.next = head;
		head.prev = last;
	}
	
	//向index位置后面插入节点
	public boolean insert(T t, int index) {
		if(index<0 || index>len) {
			System.out.println("Insert failed, index error!");
			return false;
		}
		if(index == len) {
			addTail(t);
			return true;
		}
		Node prev = getNode(index);
		Node next = getNode(index+1);
		Node temp = new Node(t);
		temp.next = next;
		temp.prev = prev;
		prev.next = temp;
		next.prev = temp;
		len++;
		return true;
	}
	
	//删除Index位置的节点
	public T delete(int index) {
		if(index<0 || index>len) {
			throw new IndexOutOfBoundsException("Delete failed, Index error!");
		}
		if(index == len) {
			Node temp = getNode(index);
			T t = temp.data;
			Node prev = getNode(index-1);
			prev.next = null;
			len--;
			return t;
		}
		Node prev = getNode(index-1);
		Node next = getNode(index+1);
		Node temp = getNode(index);
		T t = temp.data;
		prev.next = next;
		next.prev = prev;
		len--;
		return t;
	}
	
	
	//正向输出链表
	public void forwardp() {
		Node temp = head;
		for(int i=0; i<=len; i++) {
			System.out.print(temp.data + "->");
			temp = temp.next;
		}
		System.out.print(" length:" + len + "\n");
	}
	//反向输出链表
	public void backp() {
		Node temp = getNode(len);
		for(int i=0; i<=len; i++) {
			System.out.print(temp.data + "<-");
			temp = temp.prev;
		}
		System.out.print(" length:" + len + "\n");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		TwoWayList<Integer> twl = new TwoWayList<Integer>();
		twl.addTail(1);
		twl.addTail(2);
		twl.insert(3, 2);
		twl.insert(4, 3);
		twl.addTail(5);
		twl.delete(5);
		twl.forwardp();
		twl.backp();
	}
}
Chrix9 发布了6 篇原创文章 · 获赞 0 · 访问量 75 私信 关注

标签:Node,index,Java,temp,twl,next,链表,双向,prev
来源: https://blog.csdn.net/weixin_44963741/article/details/104543172

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有