首页 > 其他分享 >数据结构-单向链表练习

数据结构-单向链表练习

时间:2023-02-02 22:35:24浏览次数:34  
标签:linkList temp 单向 next 链表 HeroNode2 println 数据结构 public


public class SingLinkedList2 {
    public static void main(String[] args) {
        HeroNode2 h1 = new HeroNode2(1, "宋江", "及时雨");
        HeroNode2 h2 = new HeroNode2(3, "林冲", "豹子头");
        HeroNode2 h3 = new HeroNode2(4, "吴用", "智多星");
        HeroNode2 h4 = new HeroNode2(2, "卢俊义", "玉麒麟");
        LinkList2 linkList = new LinkList2();
        linkList.add(h1);
        linkList.add(h2);
        linkList.add(h3);
        linkList.add(h4);
        linkList.List();


//        HeroNode2 newh4 = new HeroNode2(2, "武松", "禁军教头");
//        System.out.println("=========更新=============");
//        linkList.update(newh4);
//        linkList.List();

//        System.out.println("=========删除=============");
//        linkList.dele(2);
//        linkList.dele(3);
//        linkList.dele(1);
//        linkList.dele(4);
//        linkList.List();

//        System.out.println(linkList.dataNum());
//        linkList.dele(1);
//        System.out.println(linkList.dataNum());

//        System.out.println("====倒数第K个元素====");
//        HeroNode2 h= linkList.getDataByK(1);
//        System.out.println(h);

//        链表反转
//        System.out.println("======链表反转=======");
//        linkList.rollback(linkList.getHead());
//        linkList.List();

    }
}

//定义linkList
class LinkList2 {
    private HeroNode2 head = new HeroNode2(0, "", "");

    public HeroNode2 getHead() {
        return head;
    }

    //    添加
    public void add(HeroNode2 hero) {
        HeroNode2 temp = head;
        boolean flag = false;
        while (true) {
            if (temp.next == null) {
                break;
            }
            if (temp.next.getNo() > hero.getNo()) {
                break;
            } else if (temp.next.getNo() == hero.getNo()) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            System.out.println("该数据已存在");

        } else {
            hero.next = temp.next;
            temp.next = hero;

        }

    }

    //    更新
    public void update(HeroNode2 h) {
        HeroNode2 temp = head;
        if (temp.next == null) {
            System.out.println("链表为空");
            return;
        }
        boolean flag = false;
        while (true) {
            if (temp == null) {
                break;
            }
            if (temp.getNo() == h.getNo()) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.setName(h.getName());
            temp.setNickname(h.getNickname());
            System.out.println("更新成功");
        } else {
            System.out.println("没有该编号,更新失败");
        }
    }

    //    删除
    public void dele(int no) {
        HeroNode2 temp = head;
        if (temp.next == null) {
            System.out.println("链表为空");
            return;
        }
        boolean flag = false;
        while (true) {
            if (temp.next == null) {
                break;
            }
            if (temp.next.getNo() == no) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {

            temp.next = temp.next.next;

        } else {
            System.out.println("删除失败");
        }

    }

    //    遍历
    public void List() {
        if (head.next == null) {
            System.out.println("链表为空");
        }
        HeroNode2 temp = head.next;
        while (true) {
            if (temp == null) {
                break;
            }
            System.out.println(temp);
            temp = temp.next;

        }


    }

    //    链表中有效数据的个数
    public int dataNum() {
        int index = 0;
        if (head.next == null) {
            return index;
        }
        HeroNode2 temp = head;
        while (true) {
            if (temp.next != null) {
                index++;
            } else {
                break;
            }
            temp = temp.next;
        }
        return index;
    }

    //查找单链表中倒数第k个节点
    /*
    1.链表有效数据总数
    2.位置 :总数 - k + 1;
     */
    public HeroNode2 getDataByK(int k) {
        HeroNode2 temp = head;
        if (k <= 0 || k > dataNum()) {
            throw new RuntimeException("输入越界");
        }
        int index = 0;
        while (true) {
            if (index == dataNum() - k + 1) {
                return temp;
            }
            index++;
            temp = temp.next;
        }
    }

    //    单链表反转
    /*
    1.新建临时链表 tempHead
    2.便利旧链表
    3.每遍历一个存放到新链表中  放在第一个节点的位置
     */
    public void rollback(HeroNode2 h) {
        HeroNode2 temphead = new HeroNode2(0, "", "");
        HeroNode2 temp = head.next;
        HeroNode2 next = null;

        if (temp == null || temp.next == null) {
            return;
        }
        while (temp != null) {
            next = temp.next;
            temp.next = temphead.next;
            temphead.next = temp;
            temp = next;

        }
        h.next = temphead.next;
    }

//    从尾到头打印单链表


}


//定义HeroNode,每个HeroNode对象都是一个节点
class HeroNode2 {
    public HeroNode2 next;
    private int no;
    private String name;
    private String nickname;

    public HeroNode2(int no, String name, String nickname) {
        this.name = name;
        this.nickname = nickname;
        this.no = no;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nickname='" + nickname + '\'' +

                '}';
    }
}

 

标签:linkList,temp,单向,next,链表,HeroNode2,println,数据结构,public
From: https://www.cnblogs.com/xming2023/p/17087620.html

相关文章

  • 数据结构-Hash常见操作实践
    数据结构-Hash常见操作实践目录介绍01.什么是哈希算法02.哈希算法的应用03.安全加密的场景04.唯一标识的场景05.数据校验的场景06.散列函数的场景07.Git版本的控......
  • 链表小结
    「链表LinkedList」是一种线性数据结构,其中每个元素都是单独的对象,各个元素(一般称为结点)之间通过指针连接。由于结点中记录了连接关系,因此链表的存储方式相比于数组更加......
  • Otter实现mysql数据库指定多个表实时单向同步
    背景生产库接入太多应用程序,现需要搭建从库用于测试并数据分析,由于并发量大,mysql自带的主从同步存在瓶颈,主从同步延迟增大,因此通过otter的方案实现主从同步。计划192.16......
  • Good Bye 2022: 2023 is NEAR D. Koxia and Game(数据结构,图论,数学)
    题目链接:https://codeforces.com/problemset/problem/1770/D 大致题意:有三个数组,每个数组的长度为n,数组里面的每个数在(1-n)。现在,对于每一位上面的数,Mahiru可以去掉其中......
  • 单链表的逆置
    voidreverse_linklist(LinkNode*head){ //保存第二个结点的地址 LinkNode*p=head->next->next; LinkNode*q=NULL; //把第一个结点的指针域置为NULL head->next->ne......
  • 数据结构-数据模拟队列
    模拟单向队列classArrayQueue{privateintmaxSize;privateintfront;privateintrear;privateint[]arr;publicArrayQueue(intmaxSize......
  • 数据结构-详解优先队列的二叉堆(最大堆)原理、实现和应用-C和Python
    一、堆的基础1.1优先队列和堆优先队列(PriorityQueue):特殊的“队列”,取出元素顺序是按元素优先权(关键字)大小,而非元素进入队列的先后顺序。若采用数组或链表直接实现优......
  • [数据结构] 哈夫曼树
    哈夫曼树哈夫曼树简介给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(HuffmanTree)。哈夫曼......
  • LeetCode合并两个有序链表(/dfs)
    题目将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。约束解法方法一classSolution{public:ListNode......
  • BM7 链表中环的入口结点
    https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4?tpId=295&tqId=23449&ru=%2Fpractice%2Fff05d44dfdb04e1d83bdbdab320efbcb&qru=%2Fta%2Fformat-top......