序言
今天是刷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)初始化
Null | 1 | -> | 3 | -> | 5 | -> | 7 | -> | NULL |
---|---|---|---|---|---|---|---|---|---|
pre | cur | nxt |
(2)cur指向pre
Null | <- | 1 | 3 | -> | 5 | -> | 7 | -> | NULL | |
---|---|---|---|---|---|---|---|---|---|---|
pre | cur | nxt |
(3)pre移动到cur位置;cur移动到nxt位置;nxt移动到cur.next
Null | <- | 1 | 3 | -> | 5 | -> | 7 | -> | NULL | |
---|---|---|---|---|---|---|---|---|---|---|
pre | cur | nxt |
(4)cur指向pre
Null | <- | 1 | <- | 3 | 5 | -> | 7 | -> | NULL | |
---|---|---|---|---|---|---|---|---|---|---|
pre | cur | nxt |
(5)pre移动到cur位置;cur移动到nxt位置;nxt移动到cur.next
Null | <- | 1 | <- | 3 | 5 | -> | 7 | -> | NULL | |
---|---|---|---|---|---|---|---|---|---|---|
pre | cur | nxt |
(6)cur指向pre
Null | <- | 1 | <- | 3 | <- | 5 | 7 | -> | NULL | |
---|---|---|---|---|---|---|---|---|---|---|
pre | cur | nxt |
(7)pre移动到cur位置;cur移动到nxt位置;nxt移动到cur.next
Null | <- | 1 | <- | 3 | <- | 5 | 7 | -> | NULL | |
---|---|---|---|---|---|---|---|---|---|---|
pre | cur | nxt |
(8)cur指向pre
Null | <- | 1 | <- | 3 | <- | 5 | <- | 7 | NULL | |
---|---|---|---|---|---|---|---|---|---|---|
pre | cur | nxt |
(9)pre移动到cur位置;cur移动到nxt位置
Null | <- | 1 | <- | 3 | <- | 5 | <- | 7 | NULL | |
---|---|---|---|---|---|---|---|---|---|---|
pre | cur |
当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