//獲取鏈表長度 public int getLength(HeroNode head){ if(head.next == null) return 0; //leangth: 長度 //cur:輔助變量,幫助遍歷,未統計頭節點 int length = 0; HeroNode cur = head.next; while(cur != null){ length++; cur = cur.next; } return length; }
//1、接受頭節點 head,和目標節點 index(即倒數的節點) //2、遍歷整個單鏈表,得到鏈表的總長度 size //3、得到 size 後 從鏈表第一個開始遍歷(size-index)個,就可找到目標節點 //4、若找到,則返回該節點,否則返回 null public HeroNode findLastIndexNode(HeroNode head, int index){ if(head.next == null) return null; int size = getLength(head); //超出範圍,則返回 null if(index <= 0 || index > size) return null; //第二次遍歷,到達 size-index 即到達倒數第 K 個節點 HeroNode cur = head.next; for (int i = 0; i < size - index; i++) { cur = cur.next; } return cur; }
實現比較簡單,使用的是全部遍歷的笨辦法