Skip to content

Commit 952d623

Browse files
committedMar 25, 2022
leetcode题目摘录
1 parent 9700924 commit 952d623

File tree

8 files changed

+259
-4
lines changed

8 files changed

+259
-4
lines changed
 

‎Linked_list/leetcode_206.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
"""
4+
@create: 2022/3/25 17:59
5+
@file: leetcode_234.py
6+
@author: imoyao
7+
@email: immoyao@gmail.com
8+
@desc:
9+
"""
10+
'''
11+
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
12+
13+
14+
示例 1:
15+
16+
17+
输入:head = [1,2,3,4,5]
18+
输出:[5,4,3,2,1]
19+
示例 2:
20+
21+
22+
输入:head = [1,2]
23+
输出:[2,1]
24+
示例 3:
25+
26+
输入:head = []
27+
输出:[]
28+
29+
30+
提示:
31+
32+
链表中节点的数目范围是 [0, 5000]
33+
-5000 <= Node.val <= 5000
34+
35+
36+
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
37+
38+
来源:力扣(LeetCode)
39+
链接:https://leetcode-cn.com/problems/reverse-linked-list
40+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
41+
'''

‎Linked_list/leetcode_234.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
"""
4+
@create: 2022/3/25 17:59
5+
@file: leetcode_234.py
6+
@author: imoyao
7+
@email: immoyao@gmail.com
8+
@desc:
9+
"""
10+
'''
11+
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
12+
13+
14+
15+
示例 1:
16+
17+
18+
输入:head = [1,2,2,1]
19+
输出:true
20+
示例 2:
21+
22+
23+
输入:head = [1,2]
24+
输出:false
25+
26+
27+
提示:
28+
29+
链表中节点数目在范围[1, 105] 内
30+
0 <= Node.val <= 9
31+
32+
33+
进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
34+
35+
来源:力扣(LeetCode)
36+
链接:https://leetcode-cn.com/problems/palindrome-linked-list
37+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
38+
'''

‎Linked_list/leetcode_61.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
"""
4+
@create: 2022/3/25 17:59
5+
@file: leetcode_234.py
6+
@author: imoyao
7+
@email: immoyao@gmail.com
8+
@desc:
9+
"""
10+
'''
11+
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动k个位置。
12+
13+
14+
15+
示例 1:
16+
17+
18+
输入:head = [1,2,3,4,5], k = 2
19+
输出:[4,5,1,2,3]
20+
示例 2:
21+
22+
23+
输入:head = [0,1,2], k = 4
24+
输出:[2,0,1]
25+
26+
27+
提示:
28+
29+
链表中节点的数目在范围 [0, 500] 内
30+
-100 <= Node.val <= 100
31+
0 <= k <= 2 * 109
32+
33+
来源:力扣(LeetCode)
34+
链接:https://leetcode-cn.com/problems/rotate-list
35+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
36+
'''

‎Linked_list/leetcode_707.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
"""
4+
@create: 2022/3/25 17:55
5+
@file: leetcode707.py
6+
@author: imoyao
7+
@email: immoyao@gmail.com
8+
@desc:
9+
"""
10+
'''
11+
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。
12+
13+
在链表类中实现这些功能:
14+
15+
get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
16+
addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
17+
addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
18+
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
19+
deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
20+
21+
来源:力扣(LeetCode)
22+
链接:https://leetcode-cn.com/problems/design-linked-list
23+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
24+
'''
25+
26+
27+
class Node:
28+
29+
def __init__(self, val, next_node=None):
30+
self.val = val
31+
self.next = next_node
32+
33+
# def __repr__(self):
34+
# return self.val
35+
36+
37+
class NodeList:
38+
39+
def __init__(self):
40+
self.size = 0
41+
self.head = Node(0)
42+
43+
def __iter__(self):
44+
current = self.head
45+
while current.next is not None:
46+
yield current.val
47+
current = current.next
48+
49+
def get(self, index):
50+
if index < 0 or index >= self.size:
51+
return -1
52+
current = self.head
53+
for _ in range(index + 1):
54+
current = current.next
55+
return current.val
56+
57+
def add_at_index(self, index, val):
58+
if index > self.size:
59+
return None
60+
if index < 0:
61+
index = 0
62+
63+
self.size += 1
64+
# 找到被放置节点的前一个,在哪里放置,就for几次
65+
prev = self.head # 基准节点
66+
for _ in range(index):
67+
prev = prev.next
68+
# 构造被插入节点
69+
add_node = Node(val)
70+
add_node.next = prev.next
71+
# 放入断链位置
72+
prev.next = add_node
73+
74+
def add_at_head(self, val):
75+
self.add_at_index(0, val)
76+
77+
def add_at_tail(self, val):
78+
self.add_at_index(self.size, val)
79+
80+
def delete_at_index(self, index):
81+
if index < 0 or index > self.size:
82+
return None
83+
self.size -= 1
84+
prev = self.head
85+
for _ in range(index):
86+
prev = prev.next
87+
prev.next = prev.next.next
88+
if __name__ == '__main__':
89+
90+
91+
nl = NodeList()
92+
for item in range(10):
93+
if item % 2 == 0:
94+
nl.add_at_head(item)
95+
else:
96+
nl.add_at_tail(item)
97+
98+
for item in nl:
99+
print(item)

‎Linked_list/leetcode_92.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
"""
4+
@create: 2022/3/25 17:59
5+
@file: leetcode_234.py
6+
@author: imoyao
7+
@email: immoyao@gmail.com
8+
@desc:
9+
"""
10+
'''
11+
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
12+
 
13+
14+
示例 1:
15+
16+
17+
输入:head = [1,2,3,4,5], left = 2, right = 4
18+
输出:[1,4,3,2,5]
19+
示例 2:
20+
21+
输入:head = [5], left = 1, right = 1
22+
输出:[5]
23+
 
24+
25+
提示:
26+
27+
链表中节点数目为 n
28+
1 <= n <= 500
29+
-500 <= Node.val <= 500
30+
1 <= left <= right <= n
31+
 
32+
33+
进阶: 你可以使用一趟扫描完成反转吗?
34+
35+
通过次数270,253提交次数489,409
36+
37+
来源:力扣(LeetCode)
38+
链接:https://leetcode-cn.com/problems/reverse-linked-list-ii
39+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
40+
'''

‎Linked_list/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
只要有足够的内存,就可以为链表分配内存。
1212

1313
## 缺点
14-
假如你****想读取最后一个元素,不能直接读取。但是你不知道它所在的地址,必须从头开始访问,直到访问到最后一个元素。同时访问所有元素时,效率很高,单独访问时,因为需要跳跃,导致效率很低。
14+
假如你****想读取最后一个元素,不能直接读取。由于你不知道它所在的地址,必须从头开始访问,直到访问到最后一个元素。同时访问所有元素时,效率很高,单独访问时,因为需要跳跃,导致效率很低。
1515

1616
## 复杂度比较
1717

‎Tree/readme.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
## 术语
2222
- **节点的度**:一个节点含有的子树的个数称为该节点的度;
2323
- **树的度**:一棵树中,最大的节点度称为树的度;
24-
- **叶节点**或终端节点:度为零的节点;
24+
- **叶节点**或终端节点:度为零的节点;
25+
2526
![节点与度](img/21AKcEALa8.png)
2627
- 非终端节点或分支节点:度不为零的节点;
2728
- 父亲节点或**父节点**:若一个节点含有子节点,则这个节点称为其子节点的父节点;

‎raw/datastructre/linkedlist/linkedlist.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@ def combine(l1, l2):
111111

112112
# leetcode 876 链表的中间结点 python实现
113113
class Solution:
114-
def middleNode(self, head):
114+
def middle_node(self, head):
115115
# 首先要知道链表一共有多少个结点
116116
count = 0
117117
res = {}
118-
while head != None:
118+
while head is not None:
119119
count += 1
120120
res[count] = head
121121
head = head.next

0 commit comments

Comments
 (0)
Please sign in to comment.