#include "stdafx.h"
#include <Windows.h>
ListNode* InitList();
void DisplayList(ListNode* phead);
//递归反转
ListNode* ReverseList(ListNode* oldList, ListNode*& newHead);
//非递归反转
ListNode* ReverseList2(ListNode *root);
int main()
{
ListNode* phead = InitList();
DisplayList(phead);
ListNode* pNewLst = NULL;
//ReverseList(phead, pNewLst);
pNewLst = ReverseList2(phead);
DisplayList(pNewLst);
return 0;
}
void DisplayList(ListNode* phead)
{
ListNode* ptmp = phead;
while(ptmp!=NULL)
{
printf("%d\n", ptmp->data);
ptmp = ptmp->next;
}
}
ListNode* InitList()
{
ListNode* pnode = NULL;
ListNode* pCur = NULL;
ListNode* phead =NULL;
for (int i=0; i<10;i++)
{
pnode = new ListNode();
memset(pnode, 0, sizeof(ListNode));
pnode->data = i;
if (NULL == pCur)
{
pCur = pnode;
phead = pCur;
}
else
{
pCur->next = pnode;
pCur = pCur->next;
}
}
return phead;
}
ListNode* ReverseList(ListNode* oldList, ListNode*& newHead)
{
if (NULL == oldList
||oldList->next == NULL)
{
newHead = oldList;
return newHead;
}
ReverseList(oldList->next, newHead);
oldList->next->next = oldList;
oldList->next = NULL;
return newHead;
}
ListNode* ReverseList2(ListNode *root)
{
ListNode* oldRoot = root;
if (root == NULL || root->next == NULL)
return root;
ListNode* pCur = root->next;
while(pCur!=NULL)
{
ListNode* pNext = pCur->next;
pCur->next = root;
root = pCur;
pCur = pNext;
}
oldRoot->next = NULL;
return root;
}
单链表的反转
最新推荐文章于 2023-08-08 15:19:15 发布