力扣25题. K 个一组翻转链表。第一次解决引用空指针问题

 先给出正确代码:

class Solution {
//定义迭代函数,用于翻转一段链表   
 private:
    void reverse(ListNode*head)
    {
ListNode* cur=head;
ListNode* pre=nullptr;
while(cur!=nullptr){
    ListNode* nex=cur->next;
    cur->next=pre;
    pre=cur;
    cur=nex;
}

    }
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
//加个虚假节点便于对整个链表操作 
  ListNode* dummy=new ListNode(0,head);   
   ListNode* pre=dummy;
 ListNode* RightNode; 
   while(RightNode!=nullptr){
   ListNode* LeftNode=pre->next;
      RightNode=pre;
//判断剩下长度是否小于k  
 for(int i=0;i<k;++i)
   {
       RightNode=RightNode->next;
      if (RightNode==nullptr)
      {return dummy->next;}
   }
//准备下一段要翻转的链表的头
   ListNode* nex=RightNode->next;
//断开要翻转的链表
   pre->next=nullptr;
    RightNode->next=nullptr;
   reverse(LeftNode);
  
//接回原来的链表,并找到下一段要翻转的pre
   pre->next=RightNode;
   LeftNode->next=nex;
     pre=LeftNode;
   }
   return head;
    }
};

在写代码的过程中出现了引用空指针问题

runtime error: member access within null pointer of type 'ListNode' (solution.cpp) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:50:29

检查发现for循环那几行代码出现了问题,我刚开始写成了,

 ListNode* LeftNode=pre->next;
      RightNode=LeftNode;
    for(int i=0;i<k-1;++i)
   {
       RightNode=RightNode->next;
      if (RightNode==nullptr)
      {return dummy->next;}
   }

当输入的k值为1 的时候,如果像上面这么写会跳过for循环,对RightNode==nullptr这一步无法判断。所以在ListNode* nex=RightNode->next;的时候会引用空指针。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值