赞
踩
- // 将单链表反转
- public static void reverseList(HeroNode head){
- if(head.next == null || head.next.next == null){
- return;
- }
- HeroNode reverseHead = new HeroNode(0, "", "");
- HeroNode next = null;
- HeroNode cur = head.next;
-
- while (cur != null){
- next = cur.next;
- cur.next = reverseHead.next;
- reverseHead.next = cur;
- cur = next;
- }
- head.next = reverseHead.next;
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- /*
- * 项目名称:ANA
- * 文件名称:SingleLickedListDemo.java
- * Date:2023/9/23 下午3:08
- * Author:yan_Bingo
- */
- package Learning;
-
- /**
- * @author Yan_Bingo
- * @version 1.0
- * Create by 2023/9/23 15:08
- */
- public class SingleLickedListDemo {
- public static void main(String[] args) {
- SingleLickedList lickedList = new SingleLickedList();
- HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨");
- HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟");
- HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");
- HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头");
-
-
-
- // 按编号加入
- lickedList.addByorder(heroNode1);
- lickedList.addByorder(heroNode4);
- lickedList.addByorder(heroNode2);
- lickedList.addByorder(heroNode3);
-
- lickedList.showLickedList();
-
-
-
-
-
- // 将链表反转
- System.out.println("*****");
- reverseList(lickedList.getHead());
- System.out.println("链表的节点反转情况");
- lickedList.showLickedList();
- }
-
- // 获取链表的节点个数
- public static int getNodeNum(HeroNode head){
- if(head.next == null){
- return 0;
- }
-
- HeroNode temp = head;
- int length = 0;
- while (true){
- // 没有统计头结点
- if(temp.next == null){
- break;
- }else {
- length++;
- }
- temp = temp.next;
- }
- return length;
- }
- // 查询单链表倒数第 k 个节点
- public static HeroNode findLastNode(HeroNode head, int index){
- if(head.next == null){
- System.out.println("当前链表为空,无法查询");
- return null;
- }
-
- int size = getNodeNum(head);
-
- int count = 0;
- if(index < 0 || index > size){
- System.out.println("很抱歉,无法找到");
- return null;
- }
- HeroNode temp = head;
- while (temp.next != null){
- count++;
- if(count == size + 1 - index){
- break;
- }
- temp = temp.next;
- }
- return temp.next;
-
- }
-
- // 将单链表反转
- public static void reverseList(HeroNode head){
- if(head.next == null || head.next.next == null){
- return;
- }
- HeroNode reverseHead = new HeroNode(0, "", "");
- HeroNode next = null;
- HeroNode cur = head.next;
- // while (cur != null){
- // next = cur.next;
- // cur.next = reverseHead.next;
- // reverseHead.next = cur;
- // cur = next;
- // }
- while (cur != null){
- next = cur.next;
- cur.next = reverseHead.next;
- reverseHead.next = cur;
- cur = next;
- }
- head.next = reverseHead.next;
- }
- }
-
- class SingleLickedList{
- private HeroNode head = new HeroNode(0, "", "");
-
-
- public HeroNode getHead() {
- return head;
- }
-
- //加入链表
- public void add(HeroNode heroNode){
- // 先遍历得到当前链表的尾结点
- HeroNode temp = head;
- while (true){
- if(temp.next == null){
- break;
- }
- temp = temp.next;
- }
- temp.next = heroNode;
- }
- // 按照英雄的编号加入链表
- public void addByorder(HeroNode heroNode){
- HeroNode temp = head;
- boolean flag = false; // 标志要加入的英雄编号是否已经存在
- while (true){
- // 如果已经遍历到了链表的末尾了
- if(temp.next == null){
- break;
- }else if(temp.next.no > heroNode.no){
- break;
- }else if(temp.next.no == heroNode.no){
- flag = true; // 说明要加入的英雄的编号已经存在
- break;
- }
- temp = temp.next;
- }
-
- if(flag){
- System.out.println("要加入的英雄的编号已经存在~~~");
- return;
- }else {
- heroNode.next = temp.next;
- temp.next = heroNode;
- }
- }
-
- // 修改链表节点,根据 no 来修改
- public void updataNode(HeroNode heroNode){
- if(head.next == null){
- System.out.println("当前链表为空,无法修改~~");
- return;
- }
- HeroNode temp = head;
- boolean flag = false;
- while (true){
- // 遍历到了尾结点
- if(temp.next == null) break;
-
- if (temp.no == heroNode.no){
- flag = true;
- break;
- }
-
- temp = temp.next;
- }
- if(flag){
- temp.name = heroNode.name;
- temp.nickName = heroNode.nickName;
- }else{
- System.out.printf("未找到编号为 %d 的节点,无法修改", temp.no);
- System.out.println();
- }
-
- }
-
- // 删除链表的某一个节点
- public void deleteNode(int no){
- if(head.next == null){
- System.out.println("当前链表为空,无法删除~~");
- return;
- }
-
- HeroNode temp = head;
- boolean flag = false; // 标志是否找到需要删除的节点
-
- while(true){
- if(temp.next == null){
- break;
- }
-
- if (temp.next.no == no){
- flag = true;
- break;
- }
-
- temp = temp.next;
- }
- if(flag){
- temp.next = temp.next.next;
- }else{
- System.out.printf("未找到编号为 %d 的节点,无法删除", no);
- }
- System.out.println();
- }
-
- // 查询某个节点
- public void queryNode(int no){
- if (head.next == null){
- System.out.println("当前链表为空,无法查询~~~");
- return;
- }
-
- HeroNode temp = head;
- boolean flag = false;
- while (true){
- // 当前遍历到了尾结点
- if(temp.next == null){
- break;
- }
-
- if(temp.next.no == no){
- flag = true;
- break;
- }
-
- temp = temp.next;
- }
- if(flag){
- System.out.println(temp.next);
- System.out.println();
- }else{
- System.out.printf("无法找到编号为 %d 的节点", no);
- System.out.println();
- }
- System.out.println();
- }
-
- // 遍历链表
- public void showLickedList(){
- // 先判断当前链表是否为空
- if(head.next == null){
- System.out.println("当前链表为空~~~");
- return;
- }
- HeroNode temp = head.next;
- while (temp != null){
- System.out.println(temp);
- temp = temp.next;
- }
- System.out.println();
- }
- }
-
- class HeroNode{
- public int no;
- public String name;
- public String nickName;
- public HeroNode next;
-
- // 构造器
- public HeroNode(int hNo, String hName, String hNickname){
- this.no = hNo;
- this.name = hName;
- this.nickName = hNickname;
- }
-
-
- @Override
- public String toString() {
- return "HeroNode{" +
- "no=" + no +
- ", name='" + name + '\'' +
- ", nickName='" + nickName + '\'' +
- '}';
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。