單鏈表查找倒數第K個節點



//獲取鏈表長度
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;
}

實現比較簡單,使用的是全部遍歷的笨辦法

發佈了9 篇原創文章 · 獲贊 6 · 訪問量 5709
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章