为什么这个程序在else块的末尾返回headnode

f1tvaqid  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(247)

图书图片1图书图片
我从基本的linkedlist操作开始。
这是一个在linkedlist的开始或特定位置插入新节点的程序。
我理解第一张图片的情况是,如果链表为空,插入并返回新节点。
如果插入位置无效,则返回头部。
最后一个if else块,如果位置在开始处,则在开始处插入新节点,指向头部旁边并返回新节点。
我知道block还在做什么,在特定位置插入。
问题(我知道这很愚蠢):我们为什么要回来 headNode 最后,如果我们在上面提到的每个案例/块中都返回了一个节点?它不应该在最后一个else块内返回,而不应该在外面返回吗?

2w3kk1z5

2w3kk1z51#

我们在所有4个病例中都返回了头部淋巴结。头节点始终是链表中的第一个节点。
在案例1中:-当链表为空时,创建一个新节点并返回它。因为只有1个节点,所以返回的节点是head节点。
在案例2中:-如果插入位置无效,我们返回head节点。
在案例3中:-当插入位置在开始处时,我们将新节点的下一个设置为当前头部,并返回新节点,因为它在开始处,现在是我们的新头部节点。
在案例4中:-当我们在特定位置插入时,在插入后和更改链接时,我们再次返回head节点。
要理解为什么我们总是返回头节点,请阅读下面的内容-
方法签名-

ListNode insert(ListNode NewNode , int position)

现在,这个方法的职责就是在特定位置插入节点,并始终将头节点交给这个方法的调用方。以便调用者可以从头到尾遍历链表。
假设有一个包含10个节点的链表,如果在链表的末尾插入新节点,并返回新节点而不是头节点。现在调用者不能回到链表中,因为节点总是指向下一个节点,所以调用者会认为链表只包含1个节点。

72qzrwbm

72qzrwbm2#

是否退换货 headNode 在右大括号之前或之后 else -块只是编码风格的问题。它不会改变结果。
我同意 else -块将更加一致。
在java中,没有理由不将return语句移到 else -阻止。如果忘记从其中一个分支返回,编译器将产生一个错误,没有问题。书中所展示的风格可能是从一种“从非空函数的边缘掉下来”会无声地导致严重问题的语言中继承下来的,比如(旧版本的)c。
另一种可能的旨在“消除混乱”的风格是省略 else 如果每一个 if 分支返回。例如,可以看到这个问题,尽管它是关于js的,而不是关于java的。

相关问题