链表是什么
链表和数组的区别
- 数组
需要连续的内存空间,从中间或者开头插入删除的操作比较费时 方便利用index 查找
- 链表
零散的内存空间,修改顺序只需要改变指针的指向
链表的样子
A,B,C 等是链表上的元素值,next 是该节点的指针, 指向下一个节点。prev 指向上一个节点。 如果没有下一个节点或者上一个节点就没有对应的指针
创建一个单向链表
interface MlinkNode {
value : number
next ?: MlinkNode
}
function creatLinkNode (list: number[]):MlinkNode {
if (list.length ===0) {
throw new Error('数组为空')
}
let length = list.length;
let curNode: MlinkNode = {
value : list[length-1]
}
if (length > 1) {
for (let i = length-2; i>=0; i--) {
curNode = {
value: list[i],
next: curNode
}
}
}
return curNode
}
反转链表
- 思路
- 代码实现
function reverseLinkNode(listNode: MlinkNode) :MlinkNode {
let curNode : MlinkNode | undefined = undefined
let nextNode: MlinkNode | undefined = listNode
let prevNode: MlinkNode | undefined = undefined
while (nextNode) {
// 删掉第一个元素的 next 防止循环
if (curNode && !prevNode) {
// @ts-ignore
delete curNode.next
}
// 反转指针
if (curNode && nextNode) {
curNode.next = prevNode
}
// 往后移动
prevNode = curNode
curNode = nextNode
nextNode = nextNode?.next
}
curNode!.next = prevNode
return curNode!
}
2周刷完100道前端优质面试真题 mu课 视频及资料领取请关注: 奋斗的刚子
欢迎访问我的小程序,惊喜不断啊