Быстрый узел с одним связным списком не отрезанный список - PullRequest
0 голосов
/ 14 декабря 2018

Есть одна вещь, которую я не совсем понимаю, например:

public class Node {
  var val:Int
  var next:Node?

 init(_ val:Int) {
  self.val = val
  self.next = nil
 }
}

func printList(_ node:Node?) {
  var cur = node
  while cur != nil {
   print(cur!.val, terminator: " ")
   cur = cur.next
  }
 }

 var l1 = Node(1)
 var l2 = Node(2)
 var l3 = Node(3)

 l1.next = l2
 l2.next = l3

Теперь, когда я делаю printlist(l1), она печатает:

1 2 3

, что правильно.

Что если я установлю l2.next = nil, тогда printList(l1)?Вывод: 1 2, который я могу понять.

Что я не понимаю, так это то, что если я установлю l2 = nil, то printList(l1), он все равно печатает 1 2 3.

Почему он не печатает 1, поскольку второй узел стал нулевым, поэтому он должен обрезать список?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Это связано с тем, что L2 ссылался на объект узла в памяти и устанавливал его как L1.next, а также L1.next ссылался на тот же объект в памяти.Таким образом, установка L2 в nil означает, что переменная L2 больше не должна ссылаться на объект узла, но L1.next остается неизменным и по-прежнему указывает на объект узла.

0 голосов
/ 14 декабря 2018

Переменная l2 является ссылкой на объект Node (2).Установка l2 в ноль не влияет на сам объект, только удаляет эту ссылку.Node (1) .Next по-прежнему ссылается на Node (2) и Node (2) .Next по-прежнему ссылается на Node (3)

Вы можете изобразить начальную настройку следующим образом

l1 -> Node(1)
        |
        v
l2 -> Node(2)
        |
        v
l3 -> Node(3)

И послеустановка l2 в ноль, как это

l1 -> Node(1)
        |
        v
      Node(2)
        |
        v
l3 -> Node(3)

Ни l2, ни l3 в этом отношении не имеют значения при оценке списка печати (l1)

Если целью является удаление узла (2) изОбновление списка Node (1). Далее к Node (3).например.

l1.next = l3

Ваша картинка выглядит так:

l1 -> Node(1) ---|
                 |
                 |
l2 -> Node(2)    |
                 |
                 |
l3 -> Node(3) <--|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...