2011-02-03 118 views
3

我很困惑如何添加到鏈接列表的前面。添加到鏈接列表的前面

/** 
* data is added to the front of the list 
* @modifies this 
* @ffects 2-->4-->6 becomes data-->2-->4-->6 
*/ 
public void insert(E data) { 
    if (front == null) 
     front = new Node(data, null); 
    else { 
     Node temp = new Node(data, front); 
     front = temp; 
    } 
} 

這創建了一個循環。我如何避免這種情況?

我有一個LinkedList類,它包含前端Node,位於一個名爲front的變量中。 我在這個LinkedList類中有一個Node類。

任何幫助,將不勝感激。 謝謝。

+0

這是一個功課題嗎?如果是的話,這是沒問題的,但如果是這樣的話,你應該在問題中加上「作業」標籤。 – Phrogz 2011-02-03 05:49:29

+0

這是如何創建一個循環? – Avi 2011-02-03 05:58:11

+0

這不會創建一個循環。 您是否願意提供編譯器在嘗試編譯代碼時生成的錯誤? – 2011-02-03 06:14:05

回答

2

用我有限的鏈表的知識,我敢說這樣的:

Node temp = new Node(data); 
temp.next = front; 
front = temp; 

您可能要等到周圍有人雖然確認。

2

我假設Node構造函數將下一個指針作爲第二個參數,在這種情況下,我沒有看到任何明顯的錯誤代碼。這聽起來像是一個家庭作業問題。如果是這樣,你應該這樣標記它。

1

這創建了一個循環。我如何避免這種情況?

如果沒有鏈表實現的其餘代碼,但您提供的代碼看起來不像創建循環,則無法確定。

如果正在創建一個循環,它很可能是在別處創建的。或者,您/您的測試將某些其他故障誤診爲循環造成的。

如果您需要更多幫助,請發佈更多代碼/證據......特別是Node構造函數以及讓您認爲您有循環的代碼。

6

難道你沒有訪問「下一個」節點嗎?

在這種情況下

public void insert(E data) 
{ 
    if (front == null) 
    { 
    front = new Node(data, null); 
    } 
    else 
    { 
    Node temp = new Node(data, null); 
    temp.next = front; 
    front = temp; 
    } 
} 

-

class LinkedList 
{ 
    Node front; 
    LinkedList() { front = null; } 
    public void AddToFront(String v) 
    { 
     if (front == null) 
     { 
      front = new Node(v); 
     } 
     else 
     { 
      Node n = new Node(v); 
      n.next = front; 
      front = n; 
     } 

    } 


} 

class Node 
{ 
    private String _val; 
    public Node(String val) 
    { 
     _val = val; 
    } 

    public Node next; 
} 
0

添加一個新的節點,如果當前的頭不爲空,則當前頭到新創建的節點點作爲下一個節點。

Node insert(Node head,int x) { 
    Node node = new Node(); 
    node.data = x; 
    if(head != null) { 
     node.next = head;} 
    return node; 
} 
0

這是我在Java中將節點插入到鏈表的前端或頭部的實現。

void insertAtHead(Object data){ 
    if(head==null) { 
     head = new Node(data); 
    } 
    Node tempNode = new Node(data); 
    Node currentNode = head; 
    tempNode.setNext(currentNode.getNext()); 
    head.setNext(tempNode); 
    incrementCounter(); 
}