Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
254 views
in Technique[技术] by (71.8m points)

TypeScript代码编写问题

function reverseList(head: ListNode): ListNode {
    let previous: ListNode | null = null;
    let current: ListNode | null = head;
    while(current !== null) {
        const nextNode: ListNode = current.next;
        current.next = previous;
        previous = current;
        current = nextNode;
    }
    return previous;
}

这段代码中,previous初始态为nullcurrent初始态为ListNode,必定会进入循环;
循环执行之后,current最终态为nullprevious最终态为ListNode。即返回值必然是ListNode类型

然而TypeScript会按照变量的类型声明进行检查,得出结论返回值应该为ListNode | null,如果增加null,那么需要对函数调用结果做不必要的类型检查。

求助应该如何修正这段TypeScript代码?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

居然只能采纳一个答案,其实可以有两种思路。

首先previous=null针对的是空链表和单结点链表。

如果反转函数支持空链表,参数headListNode | null,那么整个逻辑最终返回ListNode | null是合理的。完善这段代码的方式是更改函数参数类型。

如果反转函数不支持空链表,那么就有了现在这个矛盾点,完善这段代码有两种方式:

  • 单独考虑单结点链表,直接返回headprevious的指向从head开始
  • 人为控制,做强制类型转换。

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...