单链表的基本操作_Day 14:反转单链表

Day 13 作业总结

Day12 作业是删除链表中某个节点node,Day13 遍历获得链表的第i个节点,至此相信大家对链表的基本操作已经掌握。

获得长度为n 头节点为head链表的第i个节点,代码如下:

def getiNode( head, n, i):
        if i 0 or i > n: # 检查边界条件
            raise IndexError 
        cur = head
        for _ in range(i):
            cur = cur.next
        return cur

对于如下链表,值为23的节点为表头,它的指针域取值是下一个节点的指针,依次类推,最后串成一条线:

74c0cb730f1702305a5de09b9e2a9aaf.png

这是链表这个数据结构的特点。

这两天训练链表时,也有一些星友实际上完成了「列表转化为链表的任务」,代码如下所示:

传入lst转化链表返回cur_Node:

2848eaf9b15303b04f030dc259b924f2.png

以上代码实现有一个巧妙之处:self.head=ListNode(None),设置一个空的哨兵表头,并使tmpcur_Node分别指向这个空表头,for 中依次创建一个节点,tmp完成链表串联任务。

遍历完成后,cur_Node.next 便是真正的链表表头。

初次接触链表的星友,不妨多理解一下,满满就会习惯链表这种数据结构。

Day 14 作业题:反转单链表

反转单链表检验我们是否能够真正灵活使用它,也是面试频频被问道的一个题目。

例如反转上面单链表的方法之一:

ee75596ad86ab0e9b806296726e6f1e4.png
74f446b19da8a02ee539b5ce2f4f4132.png

黑色结点的下一个结点现在是空。因此,我们停止这一过程并返回新的头结点 15。

根据以上提示,请补全下面代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
      #
      #补全代码
      #

写完后去这里验证:

https://leetcode-cn.com/explore/learn/card/linked-list/195/classic-problems/750

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值