- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreverse-link-list.ts
49 lines (39 loc) · 1.43 KB
/
reverse-link-list.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* @description 反转单向链表,返回反转之后的链表
* @author tangc1
* @date 2022-04-30 20:13:15
*/
import{createLinkList,ILinkListNode}from"../base/create-link-list";
exportfunctionreverseLinkList(listNode: ILinkListNode): ILinkListNode{
// 定义三个指针
letprevNode: ILinkListNode|undefined=undefined
letcurNode: ILinkListNode|undefined=undefined
letnextNode: ILinkListNode|undefined=listNode
// 以 nextNode 为基准,遍历链表
while(nextNode){
// 如果是第一个元素,删除其next,防止循环引用
// 第一个元素curNode,其prevNode不存在,nextNode存在
if(curNode&&!prevNode){
// @ts-ignore
deletecurNode.next
}
// 反转指针
if(curNode&&prevNode){
//@ts-ignore
curNode.next=prevNode
}
// 三个指针后移
prevNode=curNode
curNode=nextNode
nextNode=nextNode?.next
}
// 遍历到最后,curNode是最后一个元素,nextNode为空,此时要将curNode的next设置成prevNode
// 注视: ! 的意思是,确定curNode.next是有值的,忽略掉语法检测
curNode!.next=prevNode
returncurNode!
}
// const arr = [100, 200, 300, 400, 500]
// const list1 = createLinkList(arr)
// console.info(list1);
// const list2 = reverseLinkList(list1)
// console.info(list2);