反转链表

47 阅读1分钟

题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

  1. 第一种方案(普通的迭代)

    优先处理空链表,空链表不需要反转。我们定义两个指针, —个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. 第二种方案(递归):

当到达链表尾的时候,要么当前节点是空 要么下一个指针是空,就结束。 返回值:每一级返回反转后的子问题的头节点

具体步骤:

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