mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
添加(0143.重排链表.md):增加typescript版本
This commit is contained in:
@ -6,6 +6,8 @@
|
||||
|
||||
# 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
|
||||
//翻转链表
|
||||
|
Reference in New Issue
Block a user