Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bb484a7

Browse files
添加(0143.重排链表.md):增加typescript版本
1 parent 9c32528 commit bb484a7

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

‎problems/0143.重排链表.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
# 143.重排链表
88

9+
[力扣题目链接](https://leetcode.cn/problems/reorder-list/submissions/)
10+
911
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20210726160122.png)
1012

1113
## 思路
@@ -465,7 +467,81 @@ var reorderList = function(head, s = [], tmp) {
465467
}
466468
```
467469

470+
### TypeScript
471+
472+
> 辅助数组法:
473+
474+
```typescript
475+
function reorderList(head: ListNode | null): void {
476+
if (head === null) return;
477+
const helperArr: ListNode[] = [];
478+
let curNode: ListNode | null = head;
479+
while (curNode !== null) {
480+
helperArr.push(curNode);
481+
curNode = curNode.next;
482+
}
483+
let node: ListNode = head;
484+
let left: number = 1,
485+
right: number = helperArr.length - 1;
486+
let count: number = 0;
487+
while (left <= right) {
488+
if (count % 2 === 0) {
489+
node.next = helperArr[right--];
490+
} else {
491+
node.next = helperArr[left++];
492+
}
493+
count++;
494+
node = node.next;
495+
}
496+
node.next = null;
497+
};
498+
```
499+
500+
> 分割链表法:
501+
502+
```typescript
503+
function reorderList(head: ListNode | null): void {
504+
if (head === null || head.next === null) return;
505+
let fastNode: ListNode = head,
506+
slowNode: ListNode = head;
507+
while (fastNode.next !== null && fastNode.next.next !== null) {
508+
slowNode = slowNode.next!;
509+
fastNode = fastNode.next.next;
510+
}
511+
let head1: ListNode | null = head;
512+
// 反转后半部分链表
513+
let head2: ListNode | null = reverseList(slowNode.next);
514+
// 分割链表
515+
slowNode.next = null;
516+
/**
517+
直接在head1链表上进行插入
518+
head1 链表长度一定大于或等于head2,
519+
因此在下面的循环中,只要head2不为null, head1 一定不为null
520+
*/
521+
while (head2 !== null) {
522+
const tempNode1: ListNode | null = head1!.next,
523+
tempNode2: ListNode | null = head2.next;
524+
head1!.next = head2;
525+
head2.next = tempNode1;
526+
head1 = tempNode1;
527+
head2 = tempNode2;
528+
}
529+
};
530+
function reverseList(head: ListNode | null): ListNode | null {
531+
let curNode: ListNode | null = head,
532+
preNode: ListNode | null = null;
533+
while (curNode !== null) {
534+
const tempNode: ListNode | null = curNode.next;
535+
curNode.next = preNode;
536+
preNode = curNode;
537+
curNode = tempNode;
538+
}
539+
return preNode;
540+
}
541+
```
542+
468543
### C
544+
469545
方法三:反转链表
470546
```c
471547
//翻转链表

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /