反转链表

83 阅读1分钟

题目连接:反转链表

对给定头的链表进行翻转,可以分为两种情况:

  1. 如果是只有一个节点,或者是空链表,则直接返回头节点
  2. 如果不是,则对链表中节点的next属性进行修改

可以看下两个节点的链表翻转,如下图:

反转节点需要知道当前节点、当前节点的前节点、当前节点的下个节点,在反转时,先保存下个节点next = cur.next,并令当前节点的下个节点指向pre,然后移动precur节点指向即可。

遍历到结尾的时候,cur为空,pre指向最后一个节点,而该节点恰好又应该是链表的遍历起始节点,因此还需要令头节点head = pre

具体用代码实现即是

function ReverseList(head) {
    if(!head || !head.next) return head;
    let pre = null, cur = head
    while(cur) {
        let next = cur.next 
        cur.next = pre
        pre = cur
        cur = next
    }
    head = pre
    return head;
}