【數據結構與算法】單鏈表的反轉

鏈表介紹

  1. 鏈表是以結點的方式來存儲,是鏈式存儲
  2. 每個結點包含data域,next域;指向下一個結點
  3. 鏈表的每一個結點不一定是連續存儲的
  4. 鏈表分帶頭結點的和沒有頭結點的鏈表
    在這裏插入圖片描述

代碼實現

先定義一個幾點reverseHead=newHeroNode
從頭遍歷原本的鏈表,每遍歷一個結點,取出一個結點放在新的鏈表(reverseHead)的最前面
原本的鏈表head.next=reverseHead.next

在這裏插入圖片描述
實現反轉的方法:

    public void reversetList(HeroNode head){
        // 如果當前鏈表爲空,或者只有一個結點,無需反轉,直接返回
        if(head.next==null || head.next.next==null){
            return;
        }
        // 定義一個輔助變量,遍歷原本的鏈表
        HeroNode cur=head.next;
        HeroNode next=null; // 指向當前結點的下一個結點
        HeroNode reverseHead=new HeroNode(0,"","");
        // 遍歷原來的鏈表,遍歷一個結點,取出後放在新的鏈表中
        while (cur!=null){
            next=cur.next;// 暫時保存當前結點的下一個結點
            cur.next=reverseHead.next;
            reverseHead.next=cur; // 將cur鏈接到新的鏈表
            cur=next;
        }
        // 實現單鏈表的反轉
        head.next=reverseHead.next;
    }

實現結果:

在這裏插入圖片描述
附加代碼:

    public static void main(String[] args) {
        HeroNode heroNode1 = new HeroNode(1, "張新某某", "霸氣");
        HeroNode heroNode2 = new HeroNode(2, "苑仁某某", "不服輸");
        HeroNode heroNode3 = new HeroNode(3, "張慧某某", "美麗");

        // 創建鏈表
        SingleLinkedList singleLinkedList=new SingleLinkedList();
        // 加入
        singleLinkedList.addByOrder(heroNode1);
        singleLinkedList.addByOrder(heroNode3);
        singleLinkedList.addByOrder(heroNode2);
        
        // 顯示
        System.out.println("顯示原本的單鏈表~");
        singleLinkedList.list();
        System.out.println("==================");

        // 單鏈表的反轉
        System.out.println("反轉後的單鏈表");
        singleLinkedList.reversetList(singleLinkedList.getHead());
        singleLinkedList.list();
    }
public class HeroNode {
    public int no;
    public String name;
    public String nickname;
    public HeroNode next;// 指向下一個節點

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章