我正在通过解决Hackerrank上的问题来重提一些核心的CS概念。我正在尝试解决Insert a node at the tail of linked list。最初,我提交了此解决方案,但给了我错误的答案:
static SinglyLinkedListNode insertNodeAtTail(SinglyLinkedListNode head, int data) {
var item = new SinglyLinkedListNode(data);
if(head == null) {
head = item;
return head;
}
while(head.next != null){
head = head.next;
}
head.next = item;
return head;
}
然后,我更改实现,并将head
分配给temp
变量以插入节点并通过它:
static SinglyLinkedListNode insertNodeAtTail(SinglyLinkedListNode head, int data) {
var item = new SinglyLinkedListNode(data);
if(head == null) {
head = item;
}
else {
var temp = head;
while(temp.next != null) {
temp = temp.next;
}
temp.next = item;
}
return head;
}
但是,这让我有些困惑。如果我将head复制到临时变量,那意味着我将head的引用复制到变量。现在,如果我要迭代该温度变量,即设置temp = temp.next
,那么我将更改temp和head的参考。那么head的值如何不变?我的意思是,就我所担心的以下两种解决方案应该以相似的方式工作。