Метод toString в реализации Linked List не работает в JS

1

Я работаю над Cracking the Coding Interview, и я думал, что буду реализовывать все структуры данных в JS 5. Может ли кто-нибудь объяснить мне, почему мой метод toString не работает?

Спасибо!

    function Node(data) {
    	this.next = null;
      this.data = data;
    }
    
    Node.prototype.appendToTail = function(data) {
    	var end = new Node(data);
      var n = this;
      while (n.next != null) {
      	n = n.next;
      }
      n.next = end;
    }
    
    Node.prototype.toString = function(head) {
    	
    	console.log(head)
    
    	if (head == null) {
      	return ""
      } else {
    	  return head.data.toString() + "-> " + head.next.toString();
      }
    	
    }
    
    var ll = new Node(1);
    ll.appendToTail(3);
    ll.appendToTail(4);
    
    console.log(ll.toString())
  • 1
    «Не работает» ... какой результат вы ожидаете получить, какой выход вы получите вместо этого?
Теги:

2 ответа

1
Лучший ответ
function Node(data) {
    this.next = null;
  this.data = data;
}

Node.prototype.appendToTail = function(data) {
  var end = new Node(data);
  var n = this;
  while (n.next != null) {
    n = n.next;
  }
  n.next = end;
};

Node.prototype.toString = function() {
    var returnValue = String(this.data);
    if (this.next) {
        returnValue = returnValue + "-> " + String(this.next); 
    }
    return returnValue;
};

var ll = new Node(1);
ll.appendToTail(3);
ll.appendToTail(4);

console.log(String(ll))

или вообще избегать подобных проблем и не использовать прототип, класс, этот, вызов и т.д.

1

Функция toString принимает аргумент, но вы не передаете его при вызове toString.

Если вы хотите получить доступ к узлу, вы должны использовать this вместо того, чтобы передавать значение

Node.prototype.toString = function() {
   var result = this.data.toString();
   if (this.next) {
     result += "-> " + this.next.toString();
   }
   return result;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню