【问题标题】:reverse linked list in between 2 indices2个索引之间的反向链表
【发布时间】:2018-02-07 04:01:25
【问题描述】:

我正在尝试解决这个问题,但我的代码中有一个错误,但我不知道为什么:https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/description/

给定一个排序链表,删除所有重复编号的节点,只留下原始列表中不同的编号。

例如, 给定 1->2->3->3->4->4->5,返回 1->2->5。 给定 1->1->1->2->3,返回 2->3。

错误是

Line 44: TypeError: Cannot read property 'val' of null

这是 Javascript 中的代码

function ListNode(val) {
    this.val = val;
    this.next = null;
}

var reverseBetween = function(head, m, n) {
    if(m>=n) return head;
    var currentNode = head;
    var previousNode = null;
    var temp = null, tempStart = null;
    var countm = 0, countn=0;
    if(!currentNode.next) return head;
    var startNode = null;
    console.log([head.val, head.next.val, head.next.next.val, head.next.next.next.val, head.next.next.next.next.val]);

    while(countm<m){
        //advance pointer and do nothing
        startNode = previousNode;
        previousNode = currentNode;
        currentNode = currentNode.next;
        countm++;
        console.log(previousNode.val + ', ' + currentNode.val)
    }
    console.log('before: startNode: ' + startNode.val + ', prev: ' + previousNode.val + ', curr: ' +currentNode.val)
    while(countn < (n-m)){

        temp = currentNode.next;
        currentNode.next = previousNode;
        startNode.next = currentNode;
        previousNode.next = temp;


        countn++;
        console.log('startNode: ' + startNode.val + ', prev: ' + previousNode.val + ', curr: ' +currentNode.val)
        console.log([head.val, head.next.val, head.next.next.val, head.next.next.next.val, head.next.next.next.next.val]);

        //advance
        previousNode = currentNode;
        currentNode = currentNode.next;
        console.log('startNode: ' + startNode.val + ', prev: ' + previousNode.val + ', curr: ' +currentNode.val)
    }

    return head;
};

var a = new ListNode(1);
var b = new ListNode(2);
var c = new ListNode(3);
var d = new ListNode(4);
var e = new ListNode(5);
a.next = b;
b.next = c;
c.next = d;
d.next = e;

reverseBetween(a, 2, 4)

【问题讨论】:

  • 你能提供一个你使用的示例链表吗?
  • 我更新了代码调用底部的链表@Skyler
  • OK 终于搞定了!我需要保存第二个指针而不是使用currentNode 来推进

标签: javascript linked-list


【解决方案1】:
function ListNode(val) {
    this.val = val;
    this.next = null;
}

var reverseBetween = function(head, m, n) {
    if(m>=n) return head;
    var currentNode = head;
    var previousNode = null;
    var temp = null, tempStart = null;
    var countm = 0, countn=0;
    if(!currentNode.next) return head;
    var startNode = null;
    console.log([head.val, head.next.val, head.next.next.val, head.next.next.next.val, head.next.next.next.next.val]);

    while(countm<m){
        //advance pointer and do nothing
        startNode = previousNode;
        previousNode = currentNode;
        currentNode = currentNode.next;
        countm++;
        console.log(previousNode.val + ', ' + currentNode.val)
    }
    console.log('before: startNode: ' + startNode.val + ', prev: ' + previousNode.val + ', curr: ' +currentNode.val)
    while(countn < (n-m)){

        temp = currentNode.next;
        temp2 = previousNode;
        currentNode.next = previousNode;
        startNode.next = currentNode;
        previousNode.next = temp;


        countn++;
        console.log('startNode: ' + startNode.val + ', prev: ' + previousNode.val + ', curr: ' +currentNode.val)
        console.log([head.val, head.next.val, head.next.next.val, head.next.next.next.val, head.next.next.next.next.val]);

        //advance
        previousNode = temp2;
        currentNode = currentNode.next;
        console.log('startNode: ' + startNode.val + ', prev: ' + previousNode.val + ', curr: ' +currentNode.val)
    }

    return head;
};

var a = new ListNode(1);
var b = new ListNode(2);
var c = new ListNode(3);
var d = new ListNode(4);
var e = new ListNode(5);
a.next = b;
b.next = c;
c.next = d;
d.next = e;

reverseBetween(a, 2, 4)

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2021-06-29
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多