如何调用参数数量不同的函数?需将带参sort2改为无参sort
链表排序函数实现问题解答
问题描述
我编写了如下带参函数:
def sort2(self, start, end): if (start == None or start == end or start == end.next): return # split list and partition recurse pivot_prev = self.paritionLast(start, end) self.sort(start, pivot_prev) if (pivot_prev != None and pivot_prev == start): self.sort(pivot_prev.next, end) # if pivot is in between of the list,start from next of pivot, # since we have pivot_prev, so we move two nodes elif (pivot_prev != None and pivot_prev.next != None): self.sort(pivot_prev.next.next, end)
但我的作业要求实现名为sort(self)的无参函数,我不清楚如何脱离这些参数完成编写,因此想编写sort(self)并在其中调用sort2(),请问这是否可行?同时想了解参数数量不同的函数间如何调用。
解答
完全可行,这是非常常规的代码组织方式——用无参的对外接口函数,封装内部带参的递归实现逻辑。
具体实现步骤
- 实现无参
sort函数:作为对外暴露的方法,它的职责是初始化递归所需的起始和结束节点,然后调用sort2。假设你的链表类有head属性指向链表头节点,代码示例如下:
def sort(self): # 处理空链表或仅单个节点的边界情况 if not self.head or not self.head.next: return # 遍历找到链表的尾节点 end = self.head while end.next: end = end.next # 调用带参的sort2,传入头节点和尾节点 self.sort2(self.head, end)
- 修正递归调用错误:注意你当前
sort2代码里调用的是self.sort(...),这会递归调用无参的sort函数,导致逻辑混乱。需要把这些调用全部改成self.sort2(...),修正后的sort2代码片段:
def sort2(self, start, end): if (start == None or start == end or start == end.next): return # split list and partition recurse pivot_prev = self.paritionLast(start, end) self.sort2(start, pivot_prev) # 修正为调用sort2 if (pivot_prev != None and pivot_prev == start): self.sort2(pivot_prev.next, end) # 修正为调用sort2 # if pivot is in between of the list,start from next of pivot, # since we have pivot_prev, so we move two nodes elif (pivot_prev != None and pivot_prev.next != None): self.sort2(pivot_prev.next.next, end) # 修正为调用sort2
参数数量不同的函数调用规则
- 调用函数时,只需要给被调用方传入它声明的所有参数即可,和调用方自身的参数数量无关。
- 比如在无参的
sort里,你需要先获取到sort2所需的start和end节点,然后直接通过self.sort2(参数1, 参数2)的形式调用,完全遵循普通函数的调用逻辑。
内容的提问来源于stack exchange,提问作者Mansi
相关产品推荐
相关产品推荐

