2010-09-21 61 views
1

这是作业,但请知道我已经在线寻找帮助(如http://www.sethi.org/classes/class_stuff/cis435/others/notes-java/data/collections/lists/simple-linked-list.html)和我的教科书,但我仍然有一些问题。在Java中帮助制作一个单独链接的列表

任何帮助,将不胜感激......

现在我想只是插入值,但没有什么工作。不管它是第一个项目,它是作为最后一个添加还是添加在其中。

Node header = null; // First element of list. 
Node back = null; // Last element of list. 

public void insert(int i, double value){ //insert value before i-th element 
    Node e = new Node(); 
    e.num = value; 
    Node curr = header; 
    for(int x=0;x<i;x++) { 
    if (i == 1) { //we want to insert as first thing 
    if (size == 0) { //its the FIRST time we add something 
    header.next = e; 
    e.next = back; 
    break; 
    } else if (size == 1){ 
    e.next = header.next; //i.e. the second thing in the list 
    header.next = e; 
    break; 
    } else { 
    e.next = header.next.next; //i.e. the second thing in the list 
    header.next = e; 
    break; 
    } 
    } 
    else if (x == (i-1)) { 
    e.next = curr.next; 
    curr.next = e; 
    break; 
    } 
    curr = curr.next; 
    } 
    size = size+1; 
} 

不知道为什么它不起作用。

谢谢!

+3

定义为“not working” – wheaties 2010-09-21 01:04:36

+2

这对于'insert in i'来说代码太多了。有两件事情:1)如果可以这样构造节点:'Node node = new Node(val);'2)使逻辑更简单。将它分解为:A)查找插入的节点,或者抛出异常/返回null(无论约定是什么),B)执行插入(事实上,这应该是节点类本身的一种方法。应该分割“Node”和“LinkedList”类之间的责任)。顺便说一下,LL的标准名称应该是“head”和“tail”,而不是“header”和“back”。想想蛇,不是Excel。什么是头部? – 2010-09-21 01:11:29

+0

@Harnish - 很棒的评论。 +1仅用于“这对于我来说插入的代码太多”。发现。 – duffymo 2010-09-21 01:18:57

回答

3

由于某些原因,仍在学习编程的人会使事情变得复杂得多。我在学习java的时候做过,当我刚刚学习一门新语言时,我仍然这样做,我标记的学生找到新的,令人惊叹的方法来完成它。你有更多的插入,然后需要,例如,一个方法,插入一个值在一个特定的索引不应该检查它是否是第一个项目插入(不是说它不应该检查边界)。这是我要做的伪代码。

insert(index, value) 
    if index>size 
     throw null pointer 
    traverse to index -1 //lets call this nodeI 
    create newnode and set value 
    set newnode.next to nodeI.next 
    set nodeI.next to newnode 
    increase size. 

几个方便的提示给你,你应该有一个函数从链接列表中获取一个元素,返回一个节点的东西?公共节点elementAt(int index)例如?使用它来遍历链表。如果你想附加到链接列表,试试这个

append(value) 
    insert(size-1,value) 

如果你想在开头插入?同样的想法

insert(value) 
    insert(0,value) 
+0

或者,尾部递归并让'Node'完成所有的工作。 ;) – 2010-09-21 02:20:49

1

几点建议:

  1. 实现java.util.List的
  2. 想想泛型
  3. this

在考虑“插入我”之前,先插入“插入末尾”。

1
  1. 在行e.next = header.next.next如果header.next指向'null'会发生什么?有可能到达那里吗?
  2. 你需要处理什么样的角落案例,并且你把他们都考虑在内?
  3. 您可以从最简单的情况开始,向前面添加元素或向后面添加元素?然后使用这些函数来实现插入?
0

我已经尝试了简单的程序,这将是你们,我也学习Java的我,请和我一起承担任何错误是有用的,但这个程序能正常工作。

我发布了一个非常简单的Java单链表程序,我今天试用过。 我希望它能帮助所有人。

LinkList。的java

class LinkList 
{ 
public static void main(String args[]) 
{ 
    Node node = new Node(1); 
    node.addAtLast(2); 
    node.addAtLast(3); 
    node.addAtLast(4); 
    node.addAtLast(5); 
    node.printList(); 
} 

} 

Node.java

class Node 
{ 
private int data; 
private Node link; 

public Node(int mydata) 
{ 
    data = mydata; 
    link = null; 
} 

public void printList() 
{ 
System.out.print("|"+data+"|"+"->"); 
if(link != null) 
{ 
//recursive call 
link.printList(); 

} 
else 
{ 
//marking end of list as NULL 
System.out.print("|NULL|"); 
} 
} 

public void addAtLast(int mydata) 
{ 
if(link == null) 
{ 

    link = new Node(mydata); 
} 
else 
{ 
    link.addAtLast(mydata); 
} 

} 

} 

OUTPUT:

的下面是我们的输出

| 1 | - > | 2 | - > | 3 | - > | 4 | - > | 5 | - > | NULL |

+0

将您的代码发布在答案中,而不是链接它。 – Prudhvi 2015-09-10 15:25:02