mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 11:34:46 +08:00
添加(0143.重排链表.md):增加typescript版本
This commit is contained in:
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
# 143.重排链表
|
# 143.重排链表
|
||||||
|
|
||||||
|
[力扣题目链接](https://leetcode.cn/problems/reorder-list/submissions/)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 思路
|
## 思路
|
||||||
@ -465,7 +467,81 @@ var reorderList = function(head, s = [], tmp) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### TypeScript
|
||||||
|
|
||||||
|
> 辅助数组法:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function reorderList(head: ListNode | null): void {
|
||||||
|
if (head === null) return;
|
||||||
|
const helperArr: ListNode[] = [];
|
||||||
|
let curNode: ListNode | null = head;
|
||||||
|
while (curNode !== null) {
|
||||||
|
helperArr.push(curNode);
|
||||||
|
curNode = curNode.next;
|
||||||
|
}
|
||||||
|
let node: ListNode = head;
|
||||||
|
let left: number = 1,
|
||||||
|
right: number = helperArr.length - 1;
|
||||||
|
let count: number = 0;
|
||||||
|
while (left <= right) {
|
||||||
|
if (count % 2 === 0) {
|
||||||
|
node.next = helperArr[right--];
|
||||||
|
} else {
|
||||||
|
node.next = helperArr[left++];
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
node = node.next;
|
||||||
|
}
|
||||||
|
node.next = null;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
> 分割链表法:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function reorderList(head: ListNode | null): void {
|
||||||
|
if (head === null || head.next === null) return;
|
||||||
|
let fastNode: ListNode = head,
|
||||||
|
slowNode: ListNode = head;
|
||||||
|
while (fastNode.next !== null && fastNode.next.next !== null) {
|
||||||
|
slowNode = slowNode.next!;
|
||||||
|
fastNode = fastNode.next.next;
|
||||||
|
}
|
||||||
|
let head1: ListNode | null = head;
|
||||||
|
// 反转后半部分链表
|
||||||
|
let head2: ListNode | null = reverseList(slowNode.next);
|
||||||
|
// 分割链表
|
||||||
|
slowNode.next = null;
|
||||||
|
/**
|
||||||
|
直接在head1链表上进行插入
|
||||||
|
head1 链表长度一定大于或等于head2,
|
||||||
|
因此在下面的循环中,只要head2不为null, head1 一定不为null
|
||||||
|
*/
|
||||||
|
while (head2 !== null) {
|
||||||
|
const tempNode1: ListNode | null = head1!.next,
|
||||||
|
tempNode2: ListNode | null = head2.next;
|
||||||
|
head1!.next = head2;
|
||||||
|
head2.next = tempNode1;
|
||||||
|
head1 = tempNode1;
|
||||||
|
head2 = tempNode2;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function reverseList(head: ListNode | null): ListNode | null {
|
||||||
|
let curNode: ListNode | null = head,
|
||||||
|
preNode: ListNode | null = null;
|
||||||
|
while (curNode !== null) {
|
||||||
|
const tempNode: ListNode | null = curNode.next;
|
||||||
|
curNode.next = preNode;
|
||||||
|
preNode = curNode;
|
||||||
|
curNode = tempNode;
|
||||||
|
}
|
||||||
|
return preNode;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### C
|
### C
|
||||||
|
|
||||||
方法三:反转链表
|
方法三:反转链表
|
||||||
```c
|
```c
|
||||||
//翻转链表
|
//翻转链表
|
||||||
|
Reference in New Issue
Block a user