Добавить в начало связанного списка - PullRequest
4 голосов
/ 03 февраля 2011

Я не понимаю, как добавить в начало связанного списка.

/**
* 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.У меня есть класс Node в этом классе LinkedList.

Любая помощь будет оценена.Спасибо.

Ответы [ 6 ]

7 голосов
/ 03 февраля 2011

У вас нет доступа к узлу "Next"

В этом случае

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;
    }
}
2 голосов
/ 03 февраля 2011

Я предполагаю, что конструктор Node принимает следующий указатель в качестве второго аргумента, и в этом случае я не вижу ничего очевидного в этом коде. Это действительно звучит как домашнее задание. Если это так, вы должны пометить его как таковой.

2 голосов
/ 03 февраля 2011

С моим ограниченным знанием связанного списка, я бы рискнул:

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

Возможно, вы захотите подождать, пока кто-нибудь подтвердит.

1 голос
/ 03 февраля 2011

Это создает цикл. Как мне этого избежать?

Невозможно знать наверняка без остальной части кода для реализации вашего связанного списка, но предоставленный вами код не выглядит так, как будто он вообще создает цикл.

Если цикл создается, он, скорее всего, создается в другом месте. Кроме того, вы / ваши тесты ошибочно диагностируют какой-то другой сбой как вызванный циклом.

Если вам нужна дополнительная помощь, опубликуйте больше кода / свидетельств ... особенно конструктора Node и кода, который заставляет вас думать, что у вас есть цикл.

0 голосов
/ 26 декабря 2016

Это моя реализация вставки узла в начало или начало связанного списка в 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();
}
0 голосов
/ 20 сентября 2016

Добавьте новый узел и, если текущий заголовок не равен нулю, то укажите текущий заголовок на вновь созданном узле в качестве следующего узла.

Node insert(Node head,int x) {
    Node node = new Node();
    node.data = x;
    if(head != null) {
       node.next = head;}
    return node;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...