链表的应用

package 美颜相机.lianbiao;

public class Node {
    Object value;
    Node next;

    public Node(Object value, Node next) {
        this.value = value;
        this.next = next;
    }

    public static void main(String[] args) {
// 创建节点
        Node node1 = new Node("医生", null);
        Node node2 = new Node("预言家", null);
        Node node3 = new Node("狼人", null);
        Node node4 = new Node("巫师", null);
        Node node5 = new Node("平民", null);
        Node node6 = new Node("猎人", null);
        Node node7 = new Node("射手", null);
// 连接节点
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
        node6.next = node7;
// 链表连成的结构
        System.out.println(node1.value);
        System.out.println(node1.next.value);
        System.out.println(node1.next.next.value);
        System.out.println(node1.next.next.next.value);
        System.out.println(node1.next.next.next.next.value);
        System.out.println(node1.next.next.next.next.next.value);
        System.out.println(node1.next.next.next.next.next.next.value);
// 打印链表
        Node temp = node1;
        while (temp != null) {
            System.out.print(temp.value + ",");
            temp = temp.next;// 将下一个节点取出来 继续循环判断
        }
        System.out.println();
// 查找节点 - 查找平民的前一个 与 后一个是谁
        String name = "平民";
        Node temp1 = node1;
        while (temp1 != null) {
            if (temp1.value.equals(name)) {
                System.out.println("查找到了平民");
                break;
            }
            temp1 = temp1.next;// 将下一个节点取出来 继续循环判断
        }
        System.out.println(temp1.value);
// 删除节点
// 删除最后一个
        Node temp2 = node1;
        while (temp2 != null) {
            if (temp2.next.next == null) {// 证明temp2是倒数第二个节点
                temp2.next = null;
                System.out.println("已经删除最后一个");
            }
            temp2 = temp2.next;
        }
// 打印链表
        temp = node1;
        while (temp != null) {
            System.out.print(temp.value + ",");
            temp = temp.next;// 将下一个节点取出来 继续循环判断
        }
        System.out.println();
// 0:查找平民的前一个 与 后一个是谁
        String name1 = "平民";
        Node temp3 = node1;
        while (temp3 != null) {
            if (temp3.next.value.equals(name1)) {
                System.out.println("查找到平民上一个节点为:" + temp3.value);
            }
            if (temp3.value.equals(name1)) {
                System.out.println("查找到平民下一个节点为:" + temp3.next.value);
                break;
            }
            temp3 = temp3.next;
        }
// 1:删除第三个
        int number = 0;
        Node temp4 = node1;
        while (temp4 != null) {
            number += 1;
            if (number == 3) {
                temp4 = temp4.next;
            }
            System.out.print(temp4.value + ",");
            temp4 = temp4.next;
        }
        System.out.println();
// 2:删除第一个 node1删除 node2 变成头节点
        Node first = node1;
        int Number = 1;
        Node temp5 = first;
        System.out.println("头节点为:" + first.value);
        while (temp5 != null) {
            System.out.print(temp5.value + ",");
            Number += 1;
            temp5 = temp5.next;
            if (Number == 2) {
                first = temp5;
            }
        }

        System.out.println("更改后头节点为:" + first.value);

// 3:连续删除两个 预言家,狼人
        Node temp6 = node1;
        String name2 = "预言家";
        while (temp6 != null) {
            temp6 = temp6.next;
            System.out.print(temp6.value + ",");
            if (temp6.value.equals(name2)) {
                temp6 = temp6.next.next.next;
                System.out.println("已删除预言家,狼人");
                break;
            }
        }

// 4:间隔删除两个 预言家 巫师
        Node temp7 = node1;
        while (temp7 != null) {
            temp7 = temp7.next;
            System.out.print(temp6.value + ",");
            if (temp7.value.equals("预言家")) {
                temp7 = temp7.next.next;
                temp7 = temp7.next.next;
                System.out.println("已删除预言家,巫师");
                break;
            }
        }

// 5:交换位置
// 6:狼人和猎手交换位置
        Node temp8 = node1;
        String NAME1 = "狼人";
        String NAME2 = "猎手";
        String Tname = null;
        while (temp8 != null) {
            temp8 = temp8.next;
            if (temp8.value == NAME1) {
                Tname = NAME1;
                temp8.value = NAME2;
            }
            if (temp8.value == NAME2) {
                temp8.value = Tname;
                break;
            }


        }


// 7: 链表反转
        Node temp9=node1;
        Node retemp=null;
        Node value1=null;
        while (temp9!=null){
            value1=temp9;
            value1.next=retemp;
            retemp=value1;
            temp9=temp9.next;
            System.out.println(value1.value);
        }
        while (value1!= null) {
            System.out.print(value1.value + ",");
            value1 = value1.next;
        }
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值