题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的投结点。
struct ListNode{
int m_nKey;
ListNode* m_pNext;
}
方法1:定义3个指针,分别指向当前遍历到的结点、它的前一个结点及后一个结点。
ListNode* ReverseList(ListNode* pHead){
ListNode* pReversedHead = NULL;
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while (pNode != NULL){
ListNode* pNext = pNode->m_pNext;
if (pNext == NULL){
pReversedHead = pNode;
}
pNode->m_pNext = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;
}
测试用例:
- 功能测试(输入的链表含有多个结点,链表中只有一个结点)
特殊输入测试(链表头结点为NULL指针)
扩展:用递归实现同样的反转链表的功能