定义有一个函数,输入一个链表的头节点,反转该链表并输出反转链表后的头节点。链表定义如下
struct ListNode {
int key;
ListNode* next;
}
编写出来的代码出现的问题
- 输入的链表头指针为NULL,或者整个链表之后一个节点时,程序立即崩溃
- 反转后的链表出现断裂
- 返回的反转之后的链表的头节点不是原始链表的尾节点
ListNode* ReverseList (ListNode* pHead) {
ListNode* pReversedHead = NULL;
ListNode* pNode = pHead; // 指向当前节点的指针
ListNode* pPrev = NULL; // 指向前一个节点的指针
while (pNode != NULL) { // 从头节点遍历到尾节点
ListNode* pNext = pNode->next; // 下一个节点的指针
if (pNext == NULL) { // 下一个几点是NULL,表明当前节点已经是尾节点
pReversedHead = pNode; // 将指向当前节点的指针指向将要返回的反转后的头指针
}
pNode->next = pPrev; // 将当前节点的下一个节点指针指向前一个节点
pPrev = pNode; // 将指向前一个节点的指针指向当前节点
pNode = pNext; // 将指向当前节点的指针指向下一个节点
}
return pReversedHead;
}
如何及时发现并代码中的问题?
- 提前想好测试用例(单元测试)
- 注意边界条件(常规输入、边界输入、错误输入)