1. 程式人生 > 其它 >單鏈表的面試演算法題[更新中...]

單鏈表的面試演算法題[更新中...]

1. 新浪面試:請設計一個單鏈表,給定頭結點和整數k,返回單鏈表倒數第k個結點。

程式碼[Java實現]:

/**
 * 返回單鏈表倒數第k個結點: [新浪面試題 & 劍指Offer.22]
 *    思路:1. 接收頭結點和k值
 *         2. 整體遍歷,得到連結串列長度
 *         3. 再次遍歷,返回(len-k)個值即為倒數第k個結點
 * @author KyleHsu
 */
public Node lastKNode(Node head,int k){
  // 沒有結點,沒有找到
  if (head.next == null){
    return null;
  }
  int len = SinglelinkedlistTest.getLen(head);
  // 如果給的k不在連結串列長度範圍內,肯定找不到
  if (k<=0 || k>len){
    return null;
  }
  Node temp = head.next;
  for (int i = 0; i < (len-k); i++) {
    temp = temp.next;
  }
  return temp;
}
/**
 * 返回單鏈表的有效節點個數
 * @author KyleHsu
 */
public static int getLen(Node head){
  if (head.next == null){
    return 0;
  }
  int length = 0;
  Node temp = head.next;
  while (temp != null){
    temp = temp.next;
    length++;
  }
  return length;
}