12、代码的鲁棒性——反转链表(python版)

题目描述

输入一个链表,反转链表后,输出新链表的表头。


由于输入的为链表输出的也为列表,因此可从调整它自身内部的指针指向下手。
示例:

  • 初始链表:
    1—》2—》3—》4—》5—》6—》7—》None
  • 反转后链表:
    None《—1《—2《—3《—4《—5《—6《—7

每次都为两两之间的指针反转,因此先考虑假如只有两个节点时候该如何反转。
1—》2—》None,设pHead为原始头节点,

temp = pHead.next	# 存第二个节点信息
pHead.next = None	# 让第一个节点作为尾结点,指向空节点
temp.next = pHead	# 改变节点指向,让第二个节点反向指向头结点

再来考虑三个反转的情况:1—》2—》3—》None

# 存储第二个节点信息
temp1 = pHead.next
# 存储第三个节点信息,保证在反转前两个节点时候,不影响第三个节点
temp2 = temp1.next

# 反转前两个
pHead.next = None
temp1.next = pHead

# 将第三个节点指向原来的第二个节点,完成反转
temp2.next = temp1

现在再来考虑一下我们的题目,本题的节点个数,当等于或大于三个时解题方式,其实与上面反转三个时相同。即每次先获取第三个节点,然后反转前两个节点,反转完之后再将第三个节点与前两个节点连接即可。而每次都需要一个变量存到第三个节点的值,由于在链表的最后为None,可设置一个变量存入None作为空节点,每次通过移动三个指针变量即可完成全部的反转。

边界条件:当节点为空节点或只有一个节点时,输出自身情况即可。

class Solution:
    # 返回ListNode
    def ReverseList(self, pHead):
        # write code here
    if not pHead or not pHead.next:
    	return pHead
   	last = None	# 作为空节点
   	while pHead:
   		temp = pHead.next	# 存入pHead的下一个节点信息
   		pHead.next = last	# 改变pHead的指向,指向之前的节点
   		last = pHead		# 移动last到它的下一个节点(pHead)
   		pHead = temp		# 移动pHead到它的下一个节点(temp)
   	return last

总结:
考虑链表问题,要注意node.next在等号左侧时,为node节点的指针将指向哪个地址的信息;node.next在等号右侧时,为node.next节点的信息。这块容易搞混,思考时候要注意。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
你想要了解单调性、相关性和鲁棒性Python代码,我可以给你一些示例代码来说明这些概念。 1. 单调性:在数学中,单调性指的是函数的增减趋势。在Python中,我们可以通过比较函数在不同点上的值来判断其单调性。 ```python def is_monotonic(lst): increasing = all(lst[i] <= lst[i+1] for i in range(len(lst)-1)) decreasing = all(lst[i] >= lst[i+1] for i in range(len(lst)-1)) return increasing or decreasing # 示例 print(is_monotonic([1, 2, 3, 4])) # True print(is_monotonic([4, 3, 2, 1])) # True print(is_monotonic([1, 3, 2, 4])) # False ``` 2. 相关性:相关性用于衡量两个变量之间的关系强度。在Python中,我们可以使用`pearsonr`函数来计算两个变量的相关系数。 ```python import scipy.stats as stats x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] correlation, p_value = stats.pearsonr(x, y) print(correlation) # 1.0 ``` 3. 鲁棒性鲁棒性指的是算法或模型对异常值的敏感程度。在Python中,我们可以使用一些统计方法来提高代码鲁棒性,例如使用中位数替代均值来减少异常值的影响。 ```python import numpy as np def mean_with_robustness(data): median = np.median(data) deviations = [abs(x - median) for x in data] MAD = np.median(deviations) outliers = [x for x in data if abs(x - median) > 2 * MAD] clean_data = [x for x in data if x not in outliers] return np.mean(clean_data) # 示例 data = [1, 2, 3, 4, 100] # 包含异常值100 print(mean_with_robustness(data)) # 2.5,忽略了异常值100的影响 ``` 希望这些示例代码能够帮助你理解单调性、相关性和鲁棒性Python中的应用。如果你有其他问题,请随时提问!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰阳星宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值