哈喽大家好,好久不见!又进入新的一个学期,这学期小编要进行python的算法学习啦,今天更新链表的部分题目~
牛客 NC78 反转链表
题目如下:
算法思想如下:
1.初始化两个指针pre和cur,分别表示前驱节点和当前节点。初始时,pre为空,cur指向头节点。
2.使用一个循环遍历链表,直到cur为空。
3.在每次循环中,首先保存当前节点的下一个节点到临时变量temp。
4.然后将当前节点的next指针指向前驱节点pre。
5.更新前驱节点pre为当前节点cur。
6.更新当前节点cur为下一个节点temp。
7.当循环结束时,所有节点的next指针都已反转,此时pre指向新的头节点,即反转后的链表的头节点。
8.返回反转后的链表头节点pre。
代码如下:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# @param head ListNode类
# @return ListNode类
#
class Solution:
def ReverseList(self, head: ListNode) -> ListNode:
pre = None # 初始化前驱节点为空
if not head: # 如果链表为空,直接返回None
return None
cur = head # 当前节点指向头节点
while cur: # 遍历链表
temp = cur.next # 保存当前节点的下一个节点
cur.next = pre # 将当前节点的下一个节点指向前驱节点
pre = cur # 更新前驱节点为当前节点
cur = temp # 更新当前节点为下一个节点
return pre # 返回反转后的链表头节点
牛客 NC33 合并两个有序链表
题目如下:
算法思想如下:
1. 创建一个新的头结点new
,用于存储合并后的链表。
2. 初始化一个指针cur
指向新链表的头结点。
3. 判断两个链表是否为空,如果其中一个为空,则直接返回另一个链表。
4. 使用两个指针p1
和p2
分别遍历两个链表。
5. 比较p1
和