详细解释java链表

package com.home;

public class MyLink {
/**
* 链表中的节点,data代表节点的值,next是指向下一个节点的引用
*/
class Node {
Node next = null;// 节点的引用,指向下一个节点
int data;// 节点的对象,即内容

    public Node(int data) {
        this.data = data;
    }
}

Node head = null; //头节点

//链表长度
public int length() {
    int length = 0;
    Node tmp = head;
    while (tmp != null) {
        length++;
        tmp = tmp.next;
    }
    return length;
}
//增加,想想增加前后变化

public void addNode(int d) {
    Node newNode = new Node(d);
    if (head == null) {//没有第一个点就把加入的变成的一个
        head = newNode;
        return;
    }
    Node tmp = head;
    while (tmp.next != null) {//遍历链表,节点后面有节点的变成上一个,直到尾部
        tmp = tmp.next;
    }
    tmp.next = newNode;//尾部加入
}

//更改,只有更改成功和更改失败

public boolean changeNode(int index,int data) {//index代表改的第几个,data代表改成啥
    if (index < 1 || index > length()) {//数值合法
        return false;
    }
    int i = 1;
    Node preNode = head;//此节点,就是前一个的next
    Node curNode = preNode.next;//后一个节点
    while (curNode != null) {//循环到链尾,找到i节点
        if (i == index) {
            preNode.data = data;//更改
            return true;
        }
        preNode = curNode;//后面节点往前移
        curNode = curNode.next;//同时节点尾部也要动
        i++;
    }
    return false;
}
//删除,考虑1. 前一个变化和2. 后一个变化
public boolean deleteNode11(int index) {//删除第几个

        if (index < 1 || index > length()) {
            return false;
        }
        if (index == 1) {
            head = head.next;
            return true;
        }
        int i = 1;
        Node preNode = head;
        Node curNode = preNode.next;
        while (curNode != null) {
            if (i == index) {
                preNode.next = curNode.next;
                return true;
            }
            preNode = curNode;
            curNode = curNode.next;
            i++;
        }
        return false;
    }

//输出链表
public void printList() {
Node tmp = head;
while (tmp != null) {
System.out.println(tmp.data);
tmp = tmp.next;
}
}

public static void main(String[] args) {
    MyLink list = new MyLink();
    list.addNode(1);
    list.addNode(2);
    list.addNode(3);
    list.addNode(4);
    list.addNode(5);
    list.addNode(6);
    System.out.println("linkLength:" + list.length());
    System.out.println("head.data:" + list.head.data);
    list.printList();
    list.changeNode(4,88);
    list.deleteNode11(5);

    System.out.println("改了删了后");
    list.printList();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值