栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

八大数据结构-双向链表和环形单向链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

八大数据结构-双向链表和环形单向链表

八大数据结构-双向链表和环形单向链表

八大数据结构-数组和栈.

八大数据结构-堆和栈的区别 | 单向链表.

双向链表
class doubleNode{
    public T val;
    public doubleNode per;
    public doubleNode next;

    public doubleNode(T val, doubleNode per, doubleNode next) {
        this.val = val;
        this.per = per;
        this.next = next;
    }

    public doubleNode(T val) {
        this.val = val;
    }

    @Override
    public String toString() {
        return "doubleNode{" +
                "val=" + val +
                '}';
    }
}
添加节点
public void addFirst(T data){
    doubleNode newdoubleNode = new doubleNode(data);
    if (first == null){
        last = newdoubleNode;
    }else {
        first.per = newdoubleNode;
        newdoubleNode.next = first;
    }
    //把新的节点作为头节点
    first = newdoubleNode;
    size ++;
}


public void addLast(T data){
    doubleNode newdoubleNode = new doubleNode(data);
    if (first == null) first = newdoubleNode;
    else {
        last.next = newdoubleNode;
        newdoubleNode.per = last;
    }
    last = newdoubleNode;
    size ++;
}


public void add(T data,int index){
    doubleNode newdoublenode = new doubleNode(data);
    if (first == null){
        first = newdoublenode;
        last = newdoublenode;
        size ++;
        return;
    }
    doubleNode temp = first;
    if (index == size){
        last.next = newdoublenode;
        newdoublenode.per = last;
        last = newdoublenode;
        size++;
        return;
    }

    for(int i = 0; i< index ; i++){
        temp = temp.next;//找到要插入节点的前一节节点
    }
    temp.per.next = newdoublenode;
    newdoublenode.next = temp;
    temp.per = newdoublenode;
    size ++;
    return;
}
删除节点
public doubleNode delete(int index){
    doubleNode temp = first;
    if (index == 0){
        //在头部删除
        doubleNode tempfirst = first;
        first = first.next;
        first.per = null;
        size--;
        return tempfirst;
    }
    if (index == size-1){
        //删除尾节点
        doubleNode templast = last;
        last.per.next = null;
        last = last.per;
        size--;
        return templast;
    }
    for (int i =0 ; i< index; i++){
        //找到要删除的节点
        temp = temp.next;
    }
    temp.per.next = temp.next;
    temp.next.per = temp.per;
    return temp;
}
遍历链表
public void show() throws IllegalAccessException {
    if (first == null) {
        throw  new IllegalAccessException("list is empty");
    }
    doubleNode temp = first;
    while (temp!=null){
        System.out.println(temp);
        temp = temp.next;
    }
}
全部代码
package linked;

public class DoubleListlinked {
    private doubleNode first;
    private doubleNode last;
    private int size;

    public DoubleListlinked() {
        this.first = null;
        this.last = null;
        size = 0;
    }

    public int getSize() {
        return size;
    }

    
    public void addFirst(T data){
        doubleNode newdoubleNode = new doubleNode(data);
        if (first == null){
            last = newdoubleNode;
        }else {
            first.per = newdoubleNode;
            newdoubleNode.next = first;
        }
        //把新的节点作为头节点
        first = newdoubleNode;
        size ++;
    }

    
    public void addLast(T data){
        doubleNode newdoubleNode = new doubleNode(data);
        if (first == null) first = newdoubleNode;
        else {
            last.next = newdoubleNode;
            newdoubleNode.per = last;
        }
        last = newdoubleNode;
        size ++;
    }

    
    public void add(T data,int index){
        doubleNode newdoublenode = new doubleNode(data);
        if (first == null){
            first = newdoublenode;
            last = newdoublenode;
            size ++;
            return;
        }
        doubleNode temp = first;
        if (index == size){
            last.next = newdoublenode;
            newdoublenode.per = last;
            last = newdoublenode;
            size++;
            return;
        }

        for(int i = 0; i< index ; i++){
            temp = temp.next;//找到要插入节点的前一节节点
        }
        temp.per.next = newdoublenode;
        newdoublenode.next = temp;
        temp.per = newdoublenode;
        size ++;
        return;
    }

    
    public void show() throws IllegalAccessException {
        if (first == null) {
            throw  new IllegalAccessException("list is empty");
        }
        doubleNode temp = first;
        while (temp!=null){
            System.out.println(temp);
            temp = temp.next;
        }
    }

    
    public doubleNode delete(int index){
        doubleNode temp = first;
        if (index == 0){
            //在头部删除
            doubleNode tempfirst = first;
            first = first.next;
            first.per = null;
            size--;
            return tempfirst;
        }
        if (index == size-1){
            //删除尾节点
            doubleNode templast = last;
            last.per.next = null;
            last = last.per;
            size--;
            return templast;
        }
        for (int i =0 ; i< index; i++){
            //找到要删除的节点
            temp = temp.next;
        }
        temp.per.next = temp.next;
        temp.next.per = temp.per;
        return temp;
    }

    public static void main(String[] args) {
        DoubleListlinked doubleListlinked = new DoubleListlinked<>();
        doubleListlinked.addFirst(0);
        doubleListlinked.addLast(1);
        System.out.println(doubleListlinked.size);
        doubleListlinked.add(2,2);
        System.out.println(doubleListlinked.size);
        try {
            doubleListlinked.show();
            doubleListlinked.delete(1);
            System.out.println("-----------");
            doubleListlinked.show();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
class doubleNode{
    public T val;
    public doubleNode per;
    public doubleNode next;

    public doubleNode(T val, doubleNode per, doubleNode next) {
        this.val = val;
        this.per = per;
        this.next = next;
    }

    public doubleNode(T val) {
        this.val = val;
    }

    @Override
    public String toString() {
        return "doubleNode{" +
                "val=" + val +
                '}';
    }
}

 
环形链表单项链表 

package linked;

import java.awt.image.CropImageFilter;

public class CircleSinglelinked {
    private CircleNode first = null;
    private int size = 0;

    
    public void circle(int count){
        if (count < 1 ) {
            System.out.println("Error");
            return;
        }
        CircleNode temp = null;
        int number = count;
        for (int i =0; i< number ; i++){
            CircleNode newnode = new CircleNode(i);
           if (i == 0){
               first = newnode;//将第一个节点指向新节点
               first.next = first;//将首节点指向自己形成环形
               temp = first;
           }else {
               temp.next = newnode;
               newnode.next = first;
               temp = newnode;

           }
           size++;
        }
    }

    public int getSize() {
        return size;
    }

    
    public void show(){
        int count = size;
        CircleNode temp = first;
        for (int i =0; i< size; i++){
            System.out.println(temp);
            temp = temp.next;
        }
    }

    
    public void add(T data,int index){
        if (index > size || index <0){
            System.out.println("error");
            return;
        }
        CircleNode temp = first;
        for (int i =0;i< index-1;i++){
            //找到前一个节点
            temp = temp.next;
        }
        CircleNode newnode = new CircleNode(data);
        newnode.next = temp.next.next;
        temp.next = newnode;
        size++;
    }
    

    public static void main(String[] args) {
        CircleSinglelinked circleSinglelinked = new CircleSinglelinked();
        circleSinglelinked.circle(8);
        circleSinglelinked.show();
        circleSinglelinked.add(8,8);
        circleSinglelinked.show();
    }
}
class CircleNode{
    public T val;
    public CircleNode next;

    public CircleNode() {
    }

    public CircleNode(T val) {
        this.val = val;
    }

    public CircleNode(T val, CircleNode next) {
        this.val = val;
        this.next = next;
    }

    @Override
    public String toString() {
        return "CircleNode{" +
                "val=" + val +
                '}';
    }
}
class CircleNode{
    public T val;
    public CircleNode next;

    public CircleNode() {
    }

    public CircleNode(T val) {
        this.val = val;
    }

    public CircleNode(T val, CircleNode next) {
        this.val = val;
        this.next = next;
    }

    @Override
    public String toString() {
        return "CircleNode{" +
                "val=" + val +
                '}';
    }
}
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号