面试题16:反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:
struct ListNode
{int value;ListNode *next;
};
代码如下:
ListNode *ReverseList(ListNode *pHead)
{ListNode *pReversedHead = nullptr;ListNode *pNode = pHead;ListNode *pPrev = nullptr;while (pNode != nullptr){ListNode *pNext = pNode->next;if (pNext == nullptr) pReversedHead = pNode;pNode->next = pPrev;pPrev = pNode;pNode = pNext;}return pReversedHead;
}
测试用例:
● 功能测试(输入的链表含有多个结点,链表中只有一个结点)。
● 特殊输入测试(链表头结点为NULL指针)。
本题考点:
● 考查应聘者对链表、指针的编程能力。
● 特别注重考查应聘者思维的全面性及写出来的代码的鲁棒性。