Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 两个索引之间的反向链表_Javascript_Linked List - Fatal编程技术网

Javascript 两个索引之间的反向链表

Javascript 两个索引之间的反向链表,javascript,linked-list,Javascript,Linked List,我试图解决这个问题,但我的代码中有一个bug,但我不知道为什么: 给定已排序的链表,删除具有重复编号的所有节点,只保留与原始列表不同的编号 比如说,, 给定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 =

我试图解决这个问题,但我的代码中有一个bug,但我不知道为什么:

给定已排序的链表,删除具有重复编号的所有节点,只保留与原始列表不同的编号

比如说,, 给定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)
函数列表节点(val){
this.val=val;
this.next=null;
}
var reverseBetween=函数(水头,m,n){
如果(m>=n)返回头;
var currentNode=头部;
var-previousNode=null;
var temp=null,tempStart=null;
var countm=0,countn=0;
如果(!currentNode.next)返回头;
var startNode=null;
log([head.val,head.next.val,head.next.next.val,head.next.next.val,head.next.next.val,head.next.next.val]);
while(countm
函数列表节点(val){
this.val=val;
this.next=null;
}
var reverseBetween=函数(水头,m,n){
如果(m>=n)返回头;
var currentNode=头部;
var-previousNode=null;
var temp=null,tempStart=null;
var countm=0,countn=0;
如果(!currentNode.next)返回头;
var startNode=null;
log([head.val,head.next.val,head.next.next.val,head.next.next.val,head.next.next.val,head.next.next.val]);

while(count)你能提供一个你使用的链表示例吗?我更新了代码,调用底部的链表@SkylerOK终于得到了这个!我需要保存第二个指针,而不是使用
currentNode
来前进
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)