java自定义双向链表_java算法--自定义双向链表以及相关方法

package com.test;public class DoublyListTest {public static void main(String[] args) {DoublyList d = new DoublyList();d.insertFirst(1);d.insertFirst(2);d.insertFirst(3);d.insertFirst(3);d.insertFirst(4);d.insertLast(7);d.displayFirst();//boolean flag = d.insertBefore(5, 8);boolean flag = d.insertAfter(5, 3);System.out.println(flag);d.displayFirst();}}class Node{public Node next;public Node previous;public long data;public Node(long data){this.next = null;this.previous = null;this.data = data;}public void displayNode(){System.out.println("data = "+data);}}class DoublyList{private Node first = null;private Node last = null;public DoublyList(){this.first = null;this.last = null;}public void insertFirst(long data){Node newNode = new Node(data);if(first == last && last == null){last = newNode;first = newNode;return;}Node temp = first;newNode.next = temp;first = newNode;temp.previous = newNode;}public void insertLast(long data){Node newNode = new Node(data);if(first == last && last == null){last = newNode;first = newNode;return ;}Node temp = last;newNode.previous = last;last = newNode;temp.next = newNode;}//在某个node的data = key的节点前面插入新数据,从左(前)开始遍历的public boolean insertBefore(long data, long key){Node newNode = new Node(data);Node previous = null;Node current = first;while(current.next != null && key != current.data){previous = current;current = current.next;}//第一个或者只有一个节点就满足要求if(key == current.data && previous == null){newNode.previous = previous;newNode.next = current;//previous.next = newNode;current.previous = newNode;first = newNode;return true;}if(key == current.data){newNode.previous = previous;newNode.next = current;previous.next = newNode;current.previous = newNode;return true;}return false;}//在某个node的data = key的节点后面插入新数据,从右(后)开始遍历的public boolean insertAfter(long data, long key){Node newNode = new Node(data);Node previous = null;Node current = last;while(current.previous != null && current.data != key){previous = current;current = current.previous;}if(previous == null && current.data == key){newNode.previous = current;newNode.next = previous;current.next = newNode;last = newNode;return true;}if(current.data == key){newNode.previous = current;newNode.next = previous;previous.previous = newNode;current.next = newNode;return true;}return false;}//在某个node的data = key的节点后面插入新数据,从左(前)开始遍历的public boolean insertAfter2(long data, long key){Node newNode = new Node(data);Node current = first;while(current.next != null && current.data != key){current = current.next;}if(current.data == key){if(current.next == null){newNode.previous = current;current.next = newNode;last = newNode;}else{Node late = current.next;newNode.previous = current;newNode.next = late;current.next = newNode;late.previous = newNode;}return true;}return false;}public Node deleteFirst(){Node temp = first;first = temp.next;first.previous = null;if(first == null){last = null;}return temp;}public Node deleteLast(){Node temp = last;last = last.previous;last.next = null;if(last == null){first = null;}return temp;}public void displayFirst(){Node temp = first;System.out.println("first -- > last");while(temp.next != null){System.out.print(temp.data+"; ");temp = temp.next;}System.out.println(temp.data);}public void displayLast(){Node temp = last;System.out.println("last -- > first");while(temp.previous != null){System.out.print(temp.data+"; ");temp = temp.previous;}System.out.println(temp.data);}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值