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的节点为表头,它的指针域取值是下一个节点的指针,依次类推,最后串成一条线:
这是链表这个数据结构的特点。
这两天训练链表时,也有一些星友实际上完成了「列表转化为链表的任务」,代码如下所示:
传入lst
转化链表返回cur_Node
:
以上代码实现有一个巧妙之处:self.head=ListNode(None)
,设置一个空的哨兵表头,并使tmp
和cur_Node
分别指向这个空表头,for 中依次创建一个节点,tmp完成链表串联任务。
遍历完成后,cur_Node.next 便是真正的链表表头。
初次接触链表的星友,不妨多理解一下,满满就会习惯链表这种数据结构。
Day 14 作业题:反转单链表
反转单链表检验我们是否能够真正灵活使用它,也是面试频频被问道的一个题目。
例如反转上面单链表的方法之一:
黑色结点的下一个结点现在是空。因此,我们停止这一过程并返回新的头结点 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