题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
-
第一种方案(普通的迭代)
优先处理空链表,空链表不需要反转。我们定义两个指针, —个pre,-个next。我们让next指向pre,然后向后移动,直到ne×t为空。
function ReverseList(pHead) {
if(pHead === null) return null
let cur = pHead
let pre = null
while(cur !== null) {
let temp = cur.next
cur.next = pre
pre = cur
cur = temp
}
retrun pre
}
modules.exports = {
ReverseList: ReverseList
}
- 第二种方案(递归):
当到达链表尾的时候,要么当前节点是空
要么下一个指针是空,就结束。
返回值:每一级返回反转后的子问题的头节点
具体步骤:
1. 对于每个节点我们递归向下遍历到最后
2. 然后往上一次逆转两个节点
3. 将逆转后的尾连接这一级的节点
function ReverseList(Head) {
if(Head === null || Head.next === null) return Head
let newHead = ReverseList(head.next)
head.next.next = head
head.next = null
return newHead