Skip to content

Commit 95dfba3

Browse files
committed
feat: add python and java solutions to leetcode problem: No.0147
1 parent 27a39cf commit 95dfba3

File tree

6 files changed

+178
-35
lines changed

6 files changed

+178
-35
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
1. [两两交换链表中的节点](/solution/0000-0099/0024.Swap%20Nodes%20in%20Pairs/README.md)
6262
1. [合并两个有序链表](/solution/0000-0099/0021.Merge%20Two%20Sorted%20Lists/README.md)
6363
1. [合并 K 个排序链表](/solution/0000-0099/0023.Merge%20k%20Sorted%20Lists/README.md)
64+
1. [对链表进行插入排序](/solution/0100-0199/0147.Insertion%20Sort%20List/README.md)
6465
1. [排序链表](/solution/0100-0199/0148.Sort%20List/README.md)
6566
1. [反转链表](/solution/0200-0299/0206.Reverse%20Linked%20List/README.md)
6667
1. [反转链表 II](/solution/0000-0099/0092.Reverse%20Linked%20List%20II/README.md)

README_EN.md

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
5959
1. [Swap Nodes in Pairs](/solution/0000-0099/0024.Swap%20Nodes%20in%20Pairs/README_EN.md)
6060
1. [Merge Two Sorted Lists](/solution/0000-0099/0021.Merge%20Two%20Sorted%20Lists/README_EN.md)
6161
1. [Merge k Sorted Lists](/solution/0000-0099/0023.Merge%20k%20Sorted%20Lists/README_EN.md)
62+
1. [Insertion Sort List](/solution/0100-0199/0147.Insertion%20Sort%20List/README_EN.md)
6263
1. [Sort List](/solution/0100-0199/0148.Sort%20List/README_EN.md)
6364
1. [Reverse Linked List](/solution/0200-0299/0206.Reverse%20Linked%20List/README_EN.md)
6465
1. [Reverse Linked List II](/solution/0000-0099/0092.Reverse%20Linked%20List%20II/README_EN.md)

solution/0100-0199/0147.Insertion Sort List/README.md

+68-2
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,88 @@
3939

4040
<!-- 这里可写通用的实现逻辑 -->
4141

42+
遍历链表,每次将遍历到的结点 cur 与前一个结点 pre 进行值比较:
43+
44+
- 若结点 cur 的值比 pre 的大,说明当前 cur 已在正确的位置,直接往下遍历。
45+
- 否则,从链表第一个结点开始遍历,将结点 cur 插入到正确的位置。
46+
47+
依次遍历,直至 cur 指向空,遍历结束。
48+
4249
<!-- tabs:start -->
4350

4451
### **Python3**
4552

4653
<!-- 这里可写当前语言的特殊实现逻辑 -->
4754

4855
```python
49-
56+
# Definition for singly-linked list.
57+
# class ListNode:
58+
# def __init__(self, x):
59+
# self.val = x
60+
# self.next = None
61+
62+
class Solution:
63+
def insertionSortList(self, head: ListNode) -> ListNode:
64+
if head is None or head.next is None:
65+
return head
66+
dummy = ListNode(head.val)
67+
dummy.next = head
68+
pre, cur = dummy, head
69+
while cur:
70+
if pre.val <= cur.val:
71+
pre, cur = cur, cur.next
72+
continue
73+
p = dummy
74+
while p.next.val <= cur.val:
75+
p = p.next
76+
t = cur.next
77+
cur.next = p.next
78+
p.next = cur
79+
pre.next = t
80+
cur = t
81+
return dummy.next
5082
```
5183

5284
### **Java**
5385

5486
<!-- 这里可写当前语言的特殊实现逻辑 -->
5587

5688
```java
57-
89+
/**
90+
* Definition for singly-linked list.
91+
* public class ListNode {
92+
* int val;
93+
* ListNode next;
94+
* ListNode(int x) { val = x; }
95+
* }
96+
*/
97+
class Solution {
98+
public ListNode insertionSortList(ListNode head) {
99+
if (head == null || head.next == null) {
100+
return head;
101+
}
102+
ListNode dummy = new ListNode(head.val);
103+
dummy.next = head;
104+
ListNode pre = dummy, cur = head;
105+
while (cur != null) {
106+
if (pre.val <= cur.val) {
107+
pre = cur;
108+
cur = cur.next;
109+
continue;
110+
}
111+
ListNode p = dummy;
112+
while (p.next.val <= cur.val) {
113+
p = p.next;
114+
}
115+
ListNode t = cur.next;
116+
cur.next = p.next;
117+
p.next = cur;
118+
pre.next = t;
119+
cur = t;
120+
}
121+
return dummy.next;
122+
}
123+
}
58124
```
59125

60126
### **...**

solution/0100-0199/0147.Insertion Sort List/README_EN.md

+61-2
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,72 @@ With each iteration one element (red) is removed from the input data and inserte
5959
### **Python3**
6060

6161
```python
62-
62+
# Definition for singly-linked list.
63+
# class ListNode:
64+
# def __init__(self, x):
65+
# self.val = x
66+
# self.next = None
67+
68+
class Solution:
69+
def insertionSortList(self, head: ListNode) -> ListNode:
70+
if head is None or head.next is None:
71+
return head
72+
dummy = ListNode(head.val)
73+
dummy.next = head
74+
pre, cur = dummy, head
75+
while cur:
76+
if pre.val <= cur.val:
77+
pre, cur = cur, cur.next
78+
continue
79+
p = dummy
80+
while p.next.val <= cur.val:
81+
p = p.next
82+
t = cur.next
83+
cur.next = p.next
84+
p.next = cur
85+
pre.next = t
86+
cur = t
87+
return dummy.next
6388
```
6489

6590
### **Java**
6691

6792
```java
68-
93+
/**
94+
* Definition for singly-linked list.
95+
* public class ListNode {
96+
* int val;
97+
* ListNode next;
98+
* ListNode(int x) { val = x; }
99+
* }
100+
*/
101+
class Solution {
102+
public ListNode insertionSortList(ListNode head) {
103+
if (head == null || head.next == null) {
104+
return head;
105+
}
106+
ListNode dummy = new ListNode(head.val);
107+
dummy.next = head;
108+
ListNode pre = dummy, cur = head;
109+
while (cur != null) {
110+
if (pre.val <= cur.val) {
111+
pre = cur;
112+
cur = cur.next;
113+
continue;
114+
}
115+
ListNode p = dummy;
116+
while (p.next.val <= cur.val) {
117+
p = p.next;
118+
}
119+
ListNode t = cur.next;
120+
cur.next = p.next;
121+
p.next = cur;
122+
pre.next = t;
123+
cur = t;
124+
}
125+
return dummy.next;
126+
}
127+
}
69128
```
70129

71130
### **...**

solution/0100-0199/0147.Insertion Sort List/Solution.java

+21-31
Original file line numberDiff line numberDiff line change
@@ -8,38 +8,28 @@
88
*/
99
class Solution {
1010
public ListNode insertionSortList(ListNode head) {
11-
if (head == null) {
12-
return null;
13-
}
14-
return insertionOneNode(head, head);
15-
}
16-
17-
private ListNode insertionOneNode(ListNode head, ListNode node) {
18-
if (head == null || node == null || node.next == null) {
11+
if (head == null || head.next == null) {
1912
return head;
2013
}
21-
22-
ListNode perNode = node;
23-
ListNode curNode = node.next;
24-
ListNode nextNode = curNode.next;
25-
26-
if (node.val <= curNode.val) {
27-
return insertionOneNode(head, curNode);
28-
} else {
29-
node.next = nextNode;
30-
}
31-
32-
ListNode pNode = new ListNode(0);
33-
pNode.next = head;
34-
head = pNode;
35-
while (pNode.next.val <= curNode.val) {
36-
pNode = pNode.next;
14+
ListNode dummy = new ListNode(head.val);
15+
dummy.next = head;
16+
ListNode pre = dummy, cur = head;
17+
while (cur != null) {
18+
if (pre.val <= cur.val) {
19+
pre = cur;
20+
cur = cur.next;
21+
continue;
22+
}
23+
ListNode p = dummy;
24+
while (p.next.val <= cur.val) {
25+
p = p.next;
26+
}
27+
ListNode t = cur.next;
28+
cur.next = p.next;
29+
p.next = cur;
30+
pre.next = t;
31+
cur = t;
3732
}
38-
ListNode nNode = pNode.next;
39-
pNode.next = curNode;
40-
curNode.next = nNode;
41-
42-
return insertionOneNode(head.next, perNode);
33+
return dummy.next;
4334
}
44-
}
45-
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Definition for singly-linked list.
2+
# class ListNode:
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.next = None
6+
7+
class Solution:
8+
def insertionSortList(self, head: ListNode) -> ListNode:
9+
if head is None or head.next is None:
10+
return head
11+
dummy = ListNode(head.val)
12+
dummy.next = head
13+
pre, cur = dummy, head
14+
while cur:
15+
if pre.val <= cur.val:
16+
pre, cur = cur, cur.next
17+
continue
18+
p = dummy
19+
while p.next.val <= cur.val:
20+
p = p.next
21+
t = cur.next
22+
cur.next = p.next
23+
p.next = cur
24+
pre.next = t
25+
cur = t
26+
return dummy.next

0 commit comments

Comments
 (0)