8。单链表初学代码复现及一些不值一提的小问题(1)

今天的数据结构课看到了单链表,因为做题的时候也感觉我虽然对于其概念还是比较明确的,但对其的操作以及一些细微的操作方面还是不够细腻,所以决定自己复现一遍老师的代码。不写不知道,一写吓一跳,就是说一句一卡,时不时想看看原代码,虽然很简单但我还是不断出小问题。

只复现了直接加入最后和指定位置加入以及显示内容三个函数,里面的问题已经数不胜数。

单链表的创建步骤:

1、创建节点类,定义节点内变量和一节点变量为next,写构造器和tostring

2、创建链表类,先初始化一个头节点head,其中不存储数据但仍要在创建时为其赋值

3、添加函数

add函数中:实现新节点加入链表尾部

1、参数为要加入的新节点

2、用遍历找到链表中的最后一个节点,但遍历时头节点不能动,所以新建一个temp临时节点来遍历链表,此处!!temp=head!!

3、用while函数和if结合,判断temp不为null时则将temp=temp.next,将temp后移,为null时用break跳出;

4、跳出while后,此时temp为链表最后一个节点,让其next等于node即完成添加。

list()函数中:实现遍历链表

1、用!!head.next!!是否为null直接判断链表是否为空

2、不为空后,生成temp临时节点,此处!!!temp=head.next!!!这里因为已经确定head.next不为空了!

3、后面正常遍历即可,不要忘了判断完输出以后还要后移即可。

addbyorder函数中:实现新节点加入固定位置:

1、设置temp,此处依旧直接!!temp=head!!

2、设置flag标识符判断该位置是否已经有节点

3、开始遍历,确认temp.next不为空后,比较temp后一节点的编码与要插入的节点的编码,若大于则说明可插入,直接跳出循环即可。若两者相等则说明要插的位置已有数据,将标识符转为true后跳出循环。

4、若flag=true时输出提醒该处无法插入,若可插入则先将temp的后一个节点赋值给新节点的next即node.next=temp.next;再将node赋值给temp的next,temp.next=node;

此函数可以保证不论输入时顺序如何,链表中的顺序始终为按要求排序的顺序。如下输入:

public static void main(String[] args){
        teamNode team1=new teamNode(1,"V5","13-2");
        teamNode team2=new teamNode(2,"RNG","11-5");
        teamNode team3=new teamNode(3,"JDG","11-5");
        teamNode team4=new teamNode(4,"TES","11-5");
        teamNode team5=new teamNode(5,"WBG","11-5");

        Singlelinkedlist singlelinkedlist=new Singlelinkedlist();

        singlelinkedlist.addbyorder(team1);
        singlelinkedlist.addbyorder(team5);
        singlelinkedlist.addbyorder(team3);
        singlelinkedlist.addbyorder(team2);
        singlelinkedlist.addbyorder(team4);

        singlelinkedlist.list();


    }

仍然可得到如下结果:

teamNode{no=1, name='V5', point='13-2'}
teamNode{no=2, name='RNG', point='11-5'}
teamNode{no=3, name='JDG', point='11-5'}
teamNode{no=4, name='TES', point='11-5'}

后续还有修改和删除,只能明天再搞了,明天不仅要早起还是满课,希望能挤出时间吧- -

 

目前为止代码如下:

package linkedlist;

public class SingleLink {
    public static void main(String[] args){
        teamNode team1=new teamNode(1,"V5","13-2");
        teamNode team2=new teamNode(2,"RNG","11-5");
        teamNode team3=new teamNode(3,"JDG","11-5");
        teamNode team4=new teamNode(4,"TES","11-5");
        teamNode team5=new teamNode(5,"WBG","11-5");

        Singlelinkedlist singlelinkedlist=new Singlelinkedlist();

//        singlelinkedlist.add(team1);
//        singlelinkedlist.add(team2);
//        singlelinkedlist.add(team3);
//        singlelinkedlist.add(team4);
//        singlelinkedlist.add(team5);

        singlelinkedlist.addbyorder(team1);
        singlelinkedlist.addbyorder(team5);
        singlelinkedlist.addbyorder(team3);
        singlelinkedlist.addbyorder(team2);
        singlelinkedlist.addbyorder(team4);

        singlelinkedlist.list();


    }
}
class Singlelinkedlist{
    private teamNode head=new teamNode(0,"","");
    public void add(teamNode node){
        teamNode temp=head;  //这里是等于head!!
        while(true){
            if(temp.next==null)break;
            temp=temp.next;
        }
        temp.next=node;
    }
    public void list(){
        if(head.next==null){
            System.out.println("empyt!!");
            return;
        }
        teamNode temp=head.next;
        while(true){
            if(temp.next==null) break;
            System.out.println(temp);
            temp=temp.next;
        }
    }
    public void addbyorder(teamNode node){
        teamNode temp=head;
        boolean flag=false;
        while (true){
            if(temp.next==null) break;
            if(temp.next.no>node.no){
                break;
            }else if(temp.next.no==node.no){
                flag=true;
                break;
            }
            temp=temp.next;     //不要忘了后移!!
        }
        if(flag){
            System.out.println("已有该排名队伍");
        }else {
            node.next=temp.next;    //不要忘了更改加入的节点的next应该指向temp当前的next
            temp.next=node;
        }
    }
}

class teamNode{
    public int no;
    public String name;
    public String point;
    public teamNode next;

    public teamNode(int no, String name, String point) {
        this.no = no;
        this.name = name;
        this.point = point;
    }

    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 getPoint() {
        return point;
    }

    public void setPoint(String point) {
        this.point = point;
    }

    @Override
    public String toString() {
        return "teamNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", point='" + point + '\'' +
                '}';
    }
}

 

posted @ 2022-03-22 00:42  水煮小白菜  阅读(40)  评论(0编辑  收藏  举报