刷Leetcode算法的第九天

序言

今天是刷LT的一天,好好干饭,好好努力,好好加油哦

Leetcode题目:
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点)

例子

输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f

回忆之前关于Node的应用:https://blog.csdn.net/Jiana_Feng/article/details/114938468
定义Node的code是

class Node:
	"""
	定义节点Node
	"""
	def __init__(self,val=0,next=None):
		self.val = val
		self.next = next

假设链表是:1-> 2 -> 4 -> None
则,如何提取每个节点的val

l1=Node(1,Node(2,Node(4)))
print(l1.val)
print(l1.next.val)
print(l1.next.next.val)
print(l1.next.next.next)
输出:
1
2
4
None

所以为了删掉node,只要让 指定要删掉的 node的val变成下一个node的val,而next是下一个next
即node.val = node.next.val ; node.next = node.next.next

def deleteNode(node):
	node.val = node.next.val
    node.next = node.next.next

Leetcode题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点

示例

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

这里使用三个指标:pre,cur和nxt。初始化这三个指标:pre是Null,cur是头节点Head,nxt是head.next.
迭代的过程是:

  • nxt移动到cur.next
  • cur指向pre
  • pre移动到cur位置
  • cur移动到nxt位置

例子如下:
假如链表为:1->3->5->7->null
则迭代是:
(1)初始化

Null1->3->5->7->NULL
precurnxt

(2)cur指向pre

Null<-13->5->7->NULL
precurnxt

(3)pre移动到cur位置;cur移动到nxt位置;nxt移动到cur.next

Null<-13->5->7->NULL
precurnxt

(4)cur指向pre

Null<-1<-35->7->NULL
precurnxt

(5)pre移动到cur位置;cur移动到nxt位置;nxt移动到cur.next

Null<-1<-35->7->NULL
precurnxt

(6)cur指向pre

Null<-1<-3<-57->NULL
precurnxt

(7)pre移动到cur位置;cur移动到nxt位置;nxt移动到cur.next

Null<-1<-3<-57->NULL
precurnxt

(8)cur指向pre

Null<-1<-3<-5<-7NULL
precurnxt

(9)pre移动到cur位置;cur移动到nxt位置

Null<-1<-3<-5<-7NULL
precur

当cur=null的时候,即返回pre

所以相应的python code:

    def reverseList(head):
        pre, cur = None, head
        while cur:
            nxt = cur.next
            cur.next = pre
            pre = cur
            cur = nxt
        return pre
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jianafeng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值