码迷,mamicode.com
首页 > 其他好文 > 详细

CC150 2.2

时间:2014-11-24 08:44:50      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:interview

2.2 Implement an algorithm to find the nth to last element of a singly linked list.

// Assume the input list has no circle.
// O(n)
Node findNthNodeToLast(Node root, int n)
{
  // Find size
  Node n = root;
  int size = 0;
  while (n != null)
  {
    size ++;
    n = n.next;
  }
  
  if (n > size)
    return null;
    
  int nFromTheStart = size - n;
  n = root;
  while (nFromTheStart != 0)
  {
    n = n.next;
  }
  
  n;
}


Another solution is to keep 2 pointer pointing for X, and X+n.

When X+n to end, return X.

// O (n)
Node findNthNodeToLast(Node head, int n)
{
  Node n = head;
  for (int i = 0 ; i < n ; i ++)
  {
    if (n == null)
      return null;
    n = n.next;    
  }
  
  Node toReturn = head;
  while (n != null)
  {
    toReturn = toReturn.next;
    n = n.next;
  }
  
  return toReturn;
}


CC150 2.2

标签:interview

原文地址:http://7371901.blog.51cto.com/7361901/1581730

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!