【发布时间】:2017-01-14 20:38:21
【问题描述】:
我是解决与数据结构相关的算法的新手,我不确定遇到问题的以下代码:
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
head = dummy;
while (head.next != null && head.next.next != null) {
ListNode n1 = head.next, n2 = head.next.next;
head.next = n2;
n1.next = n2.next;
n2.next = n1;
head = n1;
}
return dummy.next;
}
为什么我们必须在这里创建虚拟对象?
如果您能帮助我解决这个问题,那将是非常有帮助的。当您必须对链表执行某些操作时,我观察到了类似的步骤。
【问题讨论】:
-
这个函数是从哪里来的?
swapPairs()应该做什么有定义吗?在不知道预期行为是什么的情况下,我们无法告诉您为什么它以某种方式编写...... -
嗨,这是问题。请看一看。谢谢。给定一个链表,交换每两个相邻节点并返回它的头部。例如,给定 1->2->3->4,您应该将列表返回为 2->1->4->3。你的算法应该只使用常数空间。您不能修改列表中的值,只能更改节点本身。爪哇
-
它使循环内的代码更简单。否则每次更改节点时,您都必须担心它是否是头部。
-
感谢您的评论。现在把事情说清楚了。当我们必须对特定链表进行一些更改(例如删除特定节点或其他一些操作)时,我们是否使用这种方法?另外,在这里将“n1”和“n2”称为指针是否合适?我知道 java 中不存在指针的概念,但是在面试中尝试解释时,这些变量的合适名称是什么?
-
当您可能正在更改头节点时是合适的。 Java中确实存在指针,否则不会有
NullPointerException:但是它们是Pascal意义上的指针,而不是C意义上的指针。指针要么为空,要么为对象引用。但在面试中,称他们为推荐人可能更安全,因为面试官并不总是像他们应有的那样知识渊博。
标签: java algorithm linked-list