鏈表介紹
- 鏈表是以結點的方式來存儲,是鏈式存儲
- 每個結點包含data域,next域;指向下一個結點
- 鏈表的每一個結點不一定是連續存儲的
- 鏈表分帶頭結點的和沒有頭結點的鏈表
代碼實現
先定義一個幾點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 + '\''+
'}';
}
}