/*******************************************************************
Copyright(c) 2016, Tyrone Li
All rights reserved.
*******************************************************************/
// 作者:TyroneLi
//
/*
Q:
反转链表:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点
S:
分别使得每一个节点的next指针指向前一个结点,并且尾节点返回为反转后的结点头节点。
*/
#include "../utils/List.h"
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
ListNode*reversedList(ListNode**pHead)
{
if(pHead == nullptr)
return nullptr;
ListNode*reverseHead = nullptr;
ListNode*pNode = *pHead;
ListNode*pPre = nullptr;
while(pNode != nullptr)
{
ListNode*pNext = pNode->m_pNext;
if(pNext == nullptr)
reverseHead = pNode;
pNode->m_pNext = pPre;
pPre = pNode;
pNode = pNext;
}
return reverseHead;
}
void test_1()
{
std::cout << "multi nodes" << std::endl;
ListNode*pHead = createListNode(1);
addToHead(&pHead, 2);
addToHead(&pHead, 3);
addToHead(&pHead, 4);
addToHead(&pHead, 5);
addToHead(&pHead, 6);
printList(pHead);
ListNode*reverseHead = reversedList(&pHead);
printList(reverseHead);
std::cout << std::endl;
}
void test_2()
{
std::cout << "one nodes" << std::endl;
ListNode*pHead = createListNode(1);
printList(pHead);
ListNode*reverseHead = reversedList(&pHead);
printList(reverseHead);
std::cout << std::endl;
}
void test_3()
{
std::cout << "NULL List" << std::endl;
ListNode*pHead = nullptr;
printList(pHead);
ListNode*reverseHead = reversedList(&pHead);
printList(reverseHead);
std::cout << std::endl;
}
void test_reversedList()
{
test_1();
test_2();
test_3();
}
int main(int argc, char**argv)
{
test_reversedList();
return 0;
}