查詢連結串列中倒數第k個節點,若查詢成功,返回資料域的值
阿新 • • 發佈:2019-02-11
有兩種思路:
思路一:首先遍歷一遍連結串列,得到連結串列長度n,然後返回n-k+1個節點的資料域
思路二:定義兩個指標p和q,都指向頭節點的下一個節點,等到p移動到第k個節點,q和p同步移動,等到p移動到連結串列尾時,q指向的就是倒數第k個節點
思路一相當於遍歷兩遍連結串列,思路二則遍歷了一遍連結串列,思路二更優
//找連結串列中倒數第k個位置上的節點,若查詢成功,返回data域的值 //思路:首先遍歷一遍連結串列,得到連結串列長度n,然後返回n-k+1個節點的資料域 public int searchK(LinkList L, int k){ int i=0; Node p=L.head; while(p!=null){ i++; p=p.next; } p=L.head; int j=0; while(j<i-k){ p=p.next; j++; } return p.data; } //思路二:定義兩個指標p和q,都指向頭節點的下一個節點,等到p移動到第k個節點,q和p同步移動, //等到p移動到連結串列尾時,q指向的就是倒數第k個節點 public int searchK2(LinkList L, int k){ Node p=L.head.next; Node q=L.head.next; int i=0; while(i<k){ i++; p=p.next; } while(p!=null){ p=p.next; q=q.next; } return q.data; }