package com.atguigu.linkedlist;
/*** @classname: singlelinkedlistdemo
* @description: 單鏈表測試
* @date: 2021/2/28
* @author: cakin
*/public class singlelinkedlistdemo
/*** 功能描述:獲取單鏈表的有效節點節點的個數(如果是帶頭結點的鍊錶,需求不統計頭節點)
** @param head 鍊錶的頭節點
* @return 返回的就是有效節點的個數
* @author cakin
* @date 2021/3/1
*/public static int getlength(heronode head)
int length = 0;
// 定義乙個輔助的變數, 這裡我們沒有統計頭節點
heronode cur = head.next;
while (cur != null)
return length;
}}/**
* @classname: singlelinkedlistdemo
* @description: 單向鍊錶,用來管理英雄
* @date: 2021/2/28
* @author: cakin
*/class singlelinkedlist
/*** 功能描述:新增英雄節點到單向鍊錶
** @param heronode 英雄節點
* @author cakin
* @date 2021/2/28
* @description: 當不考慮編號順序時的新增
* 1 找到當前鍊錶的最後節點
* 2 將最後這個節點的next 指向 新的節點
*/public void add(heronode heronode)
// 如果沒有找到最後, 將temp後移
temp = temp.next;
}// 當退出while迴圈時,temp就指向了鍊錶的最後
// 將最後這個節點的next指向新的節點
temp.next = heronode;
}/**
* 功能描述:新增英雄時,根據排名將英雄插入到指定位置
** @param heronode 英雄節點
* @author cakin
* @date 2021/2/28
* @description: 如果有這個排名,則新增失敗,並給出提示
*/public void addbyorder(heronode heronode)
// 位置找到,就在temp的後面插入
if (temp.next.no > heronode.no) else if (temp.next.no == heronode.no)
temp = temp.next; //後移
}// 不能新增,編號存在
if (flag) else
}/**
* 功能描述:修改節點的資訊, 根據no編號來修改,即no編號不能改
** @param newheronode 待修改的英雄節點
* @author cakin
* @date 2021/2/28
*/public void update(heronode newheronode)
// 根據no編號,找到需要修改的節點,
// 定義乙個輔助變數
heronode temp = head.next;
//表示是否找到該節點
boolean flag = false;
while (true)
if (temp.no == newheronode.no)
temp = temp.next;
}// 根據flag判斷是否找到要修改的節點
if (flag) else
}/**
* 功能描述:刪除節點
** @param no 待刪除節點
* @author cakin
* @date 2021/2/28
* @description: 思路
* 1 head 不能動,因此我們需要乙個temp輔助節點找到待刪除節點的前乙個節點
* 2 說明我們在比較時,是temp.next.no和需要刪除的節點的no比較
*/public void del(int no)
if (temp.next.no == no)
temp = temp.next; // temp後移,遍歷
}// 判斷flag
if (flag) else
}// 顯示鍊錶
public void list()
// 因為頭節點,不能動,因此我們需要乙個輔助變數來遍歷
heronode temp = head.next;
while (true)
// 輸出節點的資訊
system.out.println(temp);
//將temp後移
temp = temp.next;}}
}/**
* @classname: singlelinkedlistdemo
* @description: 定義heronode , 每個heronode物件就是乙個節點
* @date: 2021/2/28
* @author: cakin
*/class heronode
// 為了顯示方便,重新tostring
@override
public string tostring()
}
heronode [no=1, name=宋江, nickname=及時雨]
heronode [no=2, name=盧俊義, nickname=玉麒麟]
heronode [no=3, name=吳用, nickname=智多星]
heronode [no=4, name=林沖, nickname=豹子頭]
修改後的鍊錶
heronode [no=1, name=宋江, nickname=及時雨]
heronode [no=2, name=小盧, nickname=玉麒麟~~]
heronode [no=3, name=吳用, nickname=智多星]
heronode [no=4, name=林沖, nickname=豹子頭]
刪除後的鍊錶
heronode [no=2, name=小盧, nickname=玉麒麟~~]
heronode [no=3, name=吳用, nickname=智多星]
有效的節點個數=2
求樹的葉子節點個數
首先我們得知道什麼事葉子節點,葉子節點就是只有根節點沒有子節點的節點。下面我們就根據這個特性來寫一下這個程式 typedef struct bitnode bitnode int sum 0 用來存放葉子節點個數 void countlef bitnode root else if root lch...
單鏈表求中間節點
難度 兩星 單鏈表求中間節點分為兩種情況 1 單鏈表長度為奇數時,如abcde,那麼中間節點就是c。2 單鏈表長度為偶數時,如abcdef,那麼中間節點有兩個c和d。本文簡單起見就取第二個中間節點。思想 其實思想很簡單,其實就是跟 判斷單鏈表儲存的字串是否為 回文串 中求中間節點的方法一模一樣,使用...
求樹相關節點個數
int depth bitree t 求二叉樹的深度 遞迴 int depth s bitree t 求二叉樹的深度 level return level int number bitree t 求二叉樹中節點的個數 int number k bitree t,int k 求二叉樹第k層節點的個數 ...