添加到链接列表的前面

时间:2011-02-03 05:36:15

标签: java linked-list

我对如何添加到链表的前面感到困惑。

/**
* 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类,它将前端节点保存在一个名为front的变量中。 我在这个LinkedList类中有一个Node类。

任何帮助将不胜感激。 谢谢。

7 个答案:

答案 0 :(得分:7)

您是否可以访问“下一步”节点?

在那种情况下

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 {
    public Node next;
    private String _val;

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

答案 1 :(得分:2)

凭借我有限的链表知识,我会冒险尝试:

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

你可能想要等待某人确认。

答案 2 :(得分:2)

我假设Node构造函数将下一个指针作为其第二个参数,在这种情况下,我没有看到此代码有任何明显错误。这听起来像是一个家庭作业问题。如果是,您应该将其标记为。

答案 3 :(得分:1)

  

这会创建一个循环。我该如何避免?

如果没有链接列表实现的其余代码,则无法确定,但您提供的代码看起来并不像它创建一个循环。

如果正在创建一个循环,则很可能是在其他地方创建的。或者,您/您的测试误将其他一些故障误认为是由循环引起的。

如果您需要更多帮助,请发布更多代码/证据...特别是Node构造函数,以及让您认为自己有周期的代码。

答案 4 :(得分:0)

添加一个新节点,如果当前头不为null,则将当前头指向新创建的节点作为下一个节点。

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

答案 5 :(得分: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();
}

答案 6 :(得分:0)

一个简单快速的[可能不是有效的]解决方案是使用新元素创建一个临时的新LinkedList,并将两个列表与前面的temp-list合并在一起。 参见下面的示例

import java.util.*;
public class Main
{

    public static Queue<Integer> addFirst(Queue<Integer> intQueue, Integer i){
        Queue<Integer> intQueue2 =  new LinkedList<Integer>();
        intQueue2.add(i);
        intQueue2.addAll(intQueue);
        intQueue = intQueue2;
        return intQueue;
    }

    public static void main(String[] args) {
        System.out.println("Hello LinkedList");

        Queue<Integer> intQueue =  new LinkedList<Integer>();
        intQueue.add(3);
        intQueue.add(4);
        intQueue.add(5);

        intQueue = addFirst(intQueue,2);
        intQueue = addFirst(intQueue,1);


        System.out.println(intQueue);
    }
}