「java代码双向循环链」java代码双向循环链怎么用

博主:adminadmin 2022-12-31 21:00:11 688

本篇文章给大家谈谈java代码双向循环链,以及java代码双向循环链怎么用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java中 双向链表是什么意思啊,是用来干啥的啊,求大神解答?谢谢

采用双向循环链表作为数据结构

1 新元素的下一个指向header

2 新元素的上一个指向header的上一个

3 新元素的上一个的下一个指向新元素

4 新元素的下一个的上一个指向新元素

一般LinkedList是采用双向循环链表,无需扩容,添加元素添加到最后即可

java 中的LinkedList 是双向循环列表吗?

源代码中:

public void addLast(E e) {

addBefore(e, header);

}

将指定元素添加到此列表的结尾

public boolean add(E e) {

addBefore(e, header);

return true;

}

所以,add是向列表尾加的

看了一下addBefore方法

应该是双链表结构 不是循环双链表

java单线链表、双向链表及循环链表中插入某节点,和删除某节点的算法(可能是头结点、中间节点、尾节点)

API里有现成的,直接用好了

java.util.List

remove

E remove(int index)移除列表中指定位置的元素(可选操作)。将所有的后续元素向左移动(将其索引减 1)。返回从列表中移除的元素。

参数:

index - 要移除的元素的索引

返回:

以前在指定位置的元素

抛出:

UnsupportedOperationException - 如果列表不支持 remove 操作

IndexOutOfBoundsException - 如果索引超出范围 (index 0 || index = size())

remove

boolean remove(Object o)从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。如果列表不包含元素,则不更改列表。更确切地讲,移除满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i 的元素(如果存在这样的元素)。如果此列表已包含指定元素(或者此列表由于调用而发生更改),则返回 true。

指定者:

接口 CollectionE 中的 remove

参数:

o - 要从该列表中移除的元素,如果存在的话

返回:

如果列表包含指定的元素,则返回 true

抛出:

ClassCastException - 如果指定元素的类型和此列表不兼容(可选)

NullPointerException - 如果指定的元素是 null,并且此列表不允许 null 元素(可选)

UnsupportedOperationException - 如果列表不支持 remove 操作

Java循环双链表如何深拷贝子表?

双链结构的话,在拷贝的过程中是直接可以用用复制粘贴就可以完成了的。

关于Java双向链表

首先建立一个双向循环列表,

指定指针开始点,并让其依次指向下个节点

当遇到7的倍数或者7这个数时,调整指针指向下一个节点的方向。

双向循环链表java

我们也做这个,,你是是吧

package KeCheng1;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Iterator;

import java.util.Scanner;

//定义节点类

class NodeAnyType {

public AnyType data;

public NodeAnyType prev;

public NodeAnyType next;

public Node(AnyType d,NodeAnyType p,NodeAnyType n){

data=d;

prev=p;

next=n;}}

public class MyLinkedListAnyType {

private int theSize;

private NodeAnyType beginMarker; //头标记或头节点

private NodeAnyType endMarker; //尾标记或尾节点

public MyLinkedList(){

beginMarker=new NodeAnyType(null,endMarker,endMarker);

endMarker = new NodeAnyType(null,beginMarker,beginMarker);

beginMarker.next = endMarker;

theSize = 0;}

public int size(){

return theSize;}

public boolean add(AnyType x){

add(size(),x);

return true;}

public void add(int idx,AnyType x){

NodeAnyType p;

p=getNode(idx);

addBefore(p,x);}

private NodeAnyType getNode(int idx) {

NodeAnyType p;

if( idx 0 || idx size( ) )

throw new IndexOutOfBoundsException( );

if( idx size( ) / 2 ) {

p = beginMarker.next;

for( int i = 0; i idx; i++ )

p = p.next;}

else

{ p = endMarker;

for( int i = size( ); i idx; i-- )

p = p.prev; }

return p;}

private void addBefore( NodeAnyType p, AnyType x ) {

NodeAnyType newNode = new NodeAnyType( x, p.prev, p );

newNode.prev.next = newNode;

p.prev = newNode;

theSize++;}

public AnyType remove( int idx ){

return remove( getNode(idx));}

private AnyType remove(NodeAnyType p){

p.next.prev = p.prev;

p.prev.next = p.next;

theSize--;

return p.data;}

public void print(){//输出链表

for(NodeAnyTypex=beginMarker.next;x.next!=beginMarker;x=x.next)

System.out.print(x.data+" ");

System.out.print("\n");}

public AnyType get( int idx ){

return getNode( idx ).data; }

public static void main(String[] args){

MyLinkedListInteger La = new MyLinkedListInteger();

int Length;

Scanner sc = new Scanner(System.in);

System.out.println("请输入要创建的双向链表的长度:(大于6)");

Length = sc.nextInt();

System.out.println("请输入"+Length+"个元素创建La双向链表:");

for(int i=0;iLength;i++)

{La.add(sc.nextInt());}

System.out.println("输入的原La双向链表:");

La.print();

System.out.println("在双向链表的第3个位置插入20:");

La.add(3,20);

La.print();

System.out.println("删除第五位置上的数:");

La.remove(5);

La.print();

System.out.println("插入最后一个节点:99");

La.add(Length,99);

La.print();

System.out.println("插入第一个节点0:");

La.add(0,0);

La.print();

System.out.println("就地逆置:");

int M=Length+2;

int b=0;

for(Length=Length+1;Length=0;Length--){

int a=La.get(M-1);

La.add(b,a);

b=b+1;

La.remove(M);

}

La.print();

}

}

关于java代码双向循环链和java代码双向循环链怎么用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。