algorithm-camp icon indicating copy to clipboard operation
algorithm-camp copied to clipboard

206. 反转链表

Open shengxinjing opened this issue 4 years ago • 7 comments

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

https://leetcode-cn.com/problems/reverse-linked-list/

shengxinjing avatar Jan 22 '20 09:01 shengxinjing

var reverseList = function(head) { let curr=head,pre=null; while(curr!=null){ let temp=curr.next; curr.next=pre; pre=curr; curr=temp; } return pre; };

rocky-191 avatar Jan 23 '20 04:01 rocky-191

var reverseList = function(head) {
    let cur = head;
    let pre =null;
    while(cur){
        let temp = cur.next;
        cur.next=pre;
        pre = cur;
        cur=temp
    }
    return pre
};

执行用时 :60 ms, 在所有 JavaScript 提交中击败了96.80%的用户 内存消耗 :34.8 MB, 在所有 JavaScript 提交中击败了83.62%的用户

chenbingweb avatar Jan 23 '20 14:01 chenbingweb

var reverseList = function(head) { var nextCur = head; var lastCur = null; var cur = null; while(nextCur){ cur = nextCur; nextCur = cur.next; cur.next = lastCur; lastCur = cur; } return lastCur; };

2017myl avatar Jan 24 '20 04:01 2017myl


var reverseList = function(head) {
    if(head === null || head.next === null){
        return head
    }
    let s = []

    let c = head
    while(c) {
        s.push(c)
        c = c.next
    }

    let h = s.pop()
    let next = h
   
    while(s.length) {
        const r = s.pop()
        r.next = null
        next.next = r
        next = next.next
    }

    return h
};

执行用时 :72 ms, 在所有 JavaScript 提交中击败了51.96%的用户 内存消耗 :35.4 MB, 在所有 JavaScript 提交中击败了24.89%的用户

kouchao avatar Jan 26 '20 09:01 kouchao

var reverseList = function (head) {
  let current = head
  let previous = null
  while (current) {
    let next = current.next;
    current.next = previous
    previous = current
    current = next
  }
  return previous
};

javin9 avatar Jan 26 '20 11:01 javin9

var reverseList = function(head) {
    // 用于保存当前节点 
    let curr = head
    // 用于保存上一位节点
    let prev = null
    while(curr){
      // 临时节点保存当前节点的下一位
      let tmp = curr.next
      // 交换节点
      curr.next = prev
      prev = curr
      // 后移到下一位节点
      curr = tmp
    }
    return prev
};

chennailiang avatar Jan 29 '20 10:01 chennailiang

//将链表元素入栈,然后逐个出栈建立新链表
var reverseList = function (head) {
    let cur = head;
    let arr = [];
    while (cur) {
        arr.push(cur.val);
        cur = cur.next;
    }

    let newHead = new ListNode(null);
    let prev = newHead;
    prev.next = null;
    let cur1;


    for (let i = arr.length; i > 0; i--) {
        let newNode = new ListNode(arr.pop());
        cur1 = newNode;
        prev.next = cur1;
        cur1.next = null;
        prev = cur1;
    }

    return newHead.next;
};

Tomatosouse avatar Feb 01 '20 14:02 Tomatosouse