1

伙计们,我有这个考试,我很难做,因为我不知道我是否会使用仅包含 switch 语句的数组。我还是Java新手,所以请帮忙。这是问题。

Write a function:
class IntList {
  public int value;
  public IntList next;
}

class Solution {
  public int solution(IntList L, int M);
}

即,给定一个由整数和一个正整数L组成的单链表N

L即,给定一个由 N 个整数和一个正整数组成的单链表M,返回存储在M-th列表中的元素中的值,从末尾开始计数,假设列表中的最后一个元素具有索引1−1如果无法返回这样的值,则该函数应返回。例如,给定L这样的:

  L = 1 -> 2 -> 3 -> 4

并且M = 2,该函数应该返回3,因为从列表末尾开始计数的第二个元素具有值3

4

4 回答 4

2

如果我没记错的话,你需要编写一个程序,将 Kth 返回到链表中的最后一个元素。- 如果它是一个单链表,你需要一个头指针。假设您有一个名为 IntList 头的头指针。以下是查找第 K 个到最后一个元素的代码

public int solution(IntList head, int k) {
  IntList temp = head;
  int count = 0;
  while(count!=k) {
    if(temp==null) {
      return -1;
    }
    temp = temp.next;
  }

  while(temp!=null) {
    head = head.next;
    temp = temp.next;
  }
  return head.value;
}

没有进行详尽的错误检查,但这应该可以。

于 2013-06-22T06:46:32.733 回答
0
  class Solution
    {
        public int solution(IntList L, int M)
        {
            IntList temp = L;
            int value=0;
            int i = 0;
            for (i = 0; i <= L.length() - 1; i++)
            {
                temp = temp.next();
                if (temp == null) break;
                value = temp.value();
                if (value == M)
                {
                    if (i == 0) return L.length() - 1;
                    else return L.length()-1-i;

                }
            }
            return -1;
        }
    }

这是解决方案。

于 2015-01-13T05:43:13.180 回答
0

高级概念:

  1. 遍历列表以找到长度 N。

  2. 如果 N < M 返回 -1。否则继续第 3 步。

  3. 遍历列表查找索引 N - M 处的元素。这里的 index 指的是从 0 到 N - 1 的正常计数方案。

于 2013-06-22T06:32:04.210 回答
0
Here is the whole program!! 

public class Program
{
    public static void Main(string[] args)
    {
        IntList iList = new IntList(2, null);
        iList.add(789); 
        iList.add(45); 
        iList.add(19); 
        iList.add(8); 
        iList.add(154564);
        iList.add(32); 
        iList.add(88);
        iList.add(109);
        Solution sol = new Solution();
        Console.WriteLine(sol.solution(iList,8));
        Console.ReadLine();
    }
}
    class Solution
    {
        public int solution(IntList L, int M)
        {
            IntList temp = L;
            int value=0;
            int i = 0;
            for (i = 0; i <= L.length() - 1; i++)
            {
                temp = temp.next();
                if (temp == null) break;
                value = temp.value();
                if (value == M)
                {
                    if (i == 0) return L.length() - 1;
                    else return L.length()-1-i;

                }
            }
            return -1;
        }
    }
class IntList
{
    private int val;
    private IntList nex;

    public IntList(int v, IntList n)
    {          
        val = v;
        nex = n;
    }
    public int length()
    {
        if (nex == null)
            return 1;
        else
            return 1 + nex.length();
    }
    public int value() { return val; }       
    public IntList next() { return nex; }
    public void setNext(IntList n) { nex = n; }
    public IntList findLast()
    {
        if (next() == null) return this;
        else return next().findLast();
    }
    public void add(int v)
    {
        findLast().setNext(new IntList(v, null));
    }
}
于 2015-01-13T05:53:06.117 回答