求單鏈表中有效節點個數

2021-10-20 18:22:11 字數 3408 閱讀 2100

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層節點的個數 ...