python算法学习——单链表

单链表结构

单链表结构原理比较简单,主要是编程时指针位置容易搞混。
另:不能像列表一样可以按下标查找,单链表只能顺序遍历查找。

如上图所示,节点由数据域和指针域构成,当前指针的next指向下一个元素的指针域,val(图中的elem)指向当前的元素值,节点定义如下:

# 定义节点
class Node(object):
    def __init__(self,val,p=0):
        self.val = val
        self.next = p
	一个个节点连起来,即构成了单链表,而也正是这样的原因,我们只要知道一个链表的首个元素的指针,即可以知道整个链表的元素和指针。
	解题时,如下图所示,一般需要知道三个地方的指针,前一个指针prev,当前指针curr,下一个指针Next(curr.next),题目一般是需要改变这三个指针的位置,达到反转链表、删除链表某元素等的目的。
	而一般头节点会变动的情况,则可能需要设置虚拟节点,让它指向head节点,虚拟节点没有元素值。
dummy_node = ListNode(-1)	# 定义一个虚拟节点
dummy_node.next = head

在这里插入图片描述

LeeCode上的单链表题目分享

主要是注意表头的前一节点、当前节点、后一节点的变化关系,一般如果需要前一节点指向头节点,则需要设置一个虚拟节点,即prev.next=head,从而使head前面有一个虚拟节点连接

1. 206 反转链表、剑指offer 24 反转链表

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        prev = None
        curr = head
        while curr :
            Next = curr.next
            curr.next = prev
            prev = curr
            curr = Next
        return prev

2. 203 移除列表元素、剑指offer18

这里主要注意的是,由于移除操作没有改变curr指针指向的下一个元素,即没有改变curr.next,因此不需要创建Next变量存储curr.next。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值