0

我正在处理一个链表问题,这是我的代码的问题,我遇到了三个错误,请帮忙。

编写一个名为“odd”的函数,它接受一个链表并返回奇数元素。实际上,编写两个函数,分别称为“奇数”和“偶数”。odd(L) 返回 L 中第 1、3、5... 项的列表。 even(L) 返回 L 中第 2、4、6... 项的列表。每个函数调用另一个。这两个功能是基于一个简单的观察。L.next 类似于 L,但缺少第一项。如果我们去掉第一个项目,项目 N+1 就变成了项目 N。所以 L 的第 2、3、4 个元素是 L.next 的第 1、2、3 个元素。现在如果 N+1 是奇数,N 是偶数,而如果 N+1 是偶数,N 是奇数。所以 L.next 的奇数成员是 L 的偶数成员,L.next 的偶数成员是 L 的奇数成员。然后我们可以计算奇数(L)如下。如果 L 为 null,则返回 null。否则返回第一项为 L.item 的列表,而它的尾巴是偶数(L.next)。计算偶数(L):如果 L 为 null,则返回 null。否则返回奇数(L.next)。您的 main 函数应该从命令行读取一个正整数列表,并以 -1 终止该列表。它应该形成一个包含这些整数的链表,计算奇数成员的列表,并打印它们。

我的代码:

public class linkedlist
{
public static void main(String[] args) 
{

  List odd = new ArrayList();
  List even = new ArrayList();
  odd(L, odd, even);
}
void odd(L curNode, ArrayList oddList, ArrayList evenList) 
{

   if (curNode == null) return;


   oddList.append(curNode.val);
   even(curNode, oddList, evenList);
}

void even(L curNode, ArrayList oddList, ArrayList evenList) 
{
   if (curNode == null || curNode.next == null) return;


   evenList.append(curNode.n ext.val);
   odd(curNode.next.next, oddList, evenList);
}
}
4

3 回答 3

0

我相信这有一个非常简单的解决方案。

您必须从列表的第一个元素开始,将其放入odd列表中,然后放在even.

所以你所要做的就是这个,

  1. 从列表的头部开始,给odd函数。
  2. odd函数中将其存储在列表中并使用其下一个odd调用该函数。even
  3. even函数中将其存储在列表中并使用其下一个even调用该函数。odd
  4. 继续这些步骤,直到达到 null。
于 2012-09-30T08:54:23.970 回答
0

这可能有效:

import java.util.LinkedList;
import java.util.Arrays;
import java.util.Scanner;

public class linked_list {

    public static void main(String args[])
    {
        linked_list theApp = new linked_list();
        theApp.run();
    }

    public void run()
    {

        LinkedList<Object> theList = getListFromUser();
        System.out.println( theList );
        LinkedList<Object> oddList = odd(theList);
        System.out.println(oddList);
    }

    LinkedList<Object> even(LinkedList<Object> theList)
    {
        if (theList == null || theList.size() == 0 )
        {
            return null;
        }
        Integer a = (Integer) theList.removeFirst();
        return odd(theList);
    }

    LinkedList<Object> odd(LinkedList<Object> theList)
    {
        if (theList == null || theList.size() == 0 )
        {
            return null;
        }
        LinkedList<Object> temp = new LinkedList<Object>();
        Integer value = (Integer) theList.removeFirst();
        LinkedList<Object> temp2 = even(theList);
        if ( temp2 != null )
        {
           temp.addAll( temp2 );
        }
        temp.add(value);
        return temp;
    }

    LinkedList<Object> getListFromUser()
    {
        LinkedList<Object> temp = new LinkedList<Object>();
        Scanner user_input = new Scanner( System.in );
        int value = 0;
        System.out.println("Enter some integers for a list");
        System.out.println("Enter -1 when done");
        String integer;
        while (value != -1)
        {
            System.out.println("Enter integer:");
            integer = user_input.next();
            value = Integer.parseInt(integer);
            if ( value != -1 )
            {
                temp.add( new Integer(value));
            }
        }
        return temp;
    }

}

跑:

Enter some integers for a list
Enter -1 when done
Enter integer:
1
Enter integer:
2
Enter integer:
3
Enter integer:
4
Enter integer:
5
Enter integer:
6
Enter integer:
7
Enter integer:
8
Enter integer:
9
Enter integer:
10
Enter integer:
-1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[9, 7, 5, 3, 1]
于 2012-10-01T21:44:32.940 回答
0

您有语法错误。试试这个代码:

public class OddEven {
  public List even(List L) {
    List toReturn = new ArrayList();

    //replace this line with code that takes all even
    toReturn.add(L.get(0));

    return toReturn;
  }

  public static void main(String []args) {
    OddEven o = new OddEven();
    List input = Arrays.asList(1,2,3,4,5);

    List even = o.even(input);

    System.out.println(even);
  }
}
于 2012-09-30T16:07:41.010 回答