我正在尝试从链表中删除一个节点,但存在一些运行时错误

为什么在while循环中不打印current->val的值,

 while(i<=count-B-1)
    {
        cout<<i<<endl;
        current=current->next;
        cout<<current->val<<endl;
        i++;
    }

完整代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x),next(NULL) {}
 * };
 */
ListNode* Solution::removeNthFromEnd(ListNode* A,int B) {
    int count=0;
    ListNode *current=A;
    while(current!=NULL)
    {
        count++;
        current=current->next;
    }
    if(B>count)
    {
        return A->next;
    }
    if(A->next=NULL)
    {
        return A->next;
    }
    current = A;
    int i=0;
    while(i<=count-B-1)
    {
        cout<<i<<endl;
        current=current->next;
        cout<<current->val<<endl;
        i++;
    }
    // cout<<current->val<<endl;
    current->next=current->next->next;
    return A;
    
}
zqscydqyzj 回答:我正在尝试从链表中删除一个节点,但存在一些运行时错误

一些问题:

  • 循环不循环的原因是您无意中将列表减少到只有一个节点:

    if(A->next=NULL)
    

    应该是:

    if(A->next==NULL)
    

    一个好的编译器/IDE 应该对此给出警告。

  • Bcount时,那么第一个节点应该被移除,所以改变

    if(B>count)
    

    到:

    if(B>=count)
    
  • while 循环应该减少一次迭代。所以改变:

    while(i<=count-B-1)
    

    到:

    while(i<count-B-1)
    
本文链接:https://www.f2er.com/27035.html

大家都在问