#include <iostream>
using namespace std;
typedef struct ListNode
{
int value;
ListNode *next;
}ListNode;
//反转链表的实现
//包含头结点
ListNode* ReverseList(ListNode* phead) {
ListNode* currptr = phead->next; //currptr初始化,从首结点开始
ListNode* preptr = NULL; //preptr初始化,从首结点开始
ListNode* temp; //存旧链表下一个结点的地址
phead->next=NULL; //断开旧链表中头结点与首结点的联系
while (currptr)
{
temp = currptr->next;
currptr->next = preptr;
preptr = currptr;
currptr = temp;
}
phead->next = preptr;
return phead;
}
void CreateLink(ListNode *phead)//尾插法
{
ListNode *prevPtr;
phead->next = NULL;
prevPtr = phead;//存
for (int i = 0; i<9; i++)
{
ListNode *currPtr = new ListNode;
int value;
cin >> value;
currPtr->value = value;
currPtr->next = NULL;
prevPtr->next = currPtr;
prevPtr = currPtr;//存
}
}
int main()
{
ListNode *head = new ListNode;//创建头结点
CreateLink(head);
ListNode *newhead = ReverseList(head);
ListNode *temp = newhead->next;
cout << "Reversed List:" << endl;
while (temp != NULL) {
cout << temp->value << endl;
temp = temp->next;
}
system("pause");
return 0;
}
接下来是不含头结点的链表反转
#include <iostream>
using namespace std;
typedef struct ListNode
{
int value;
ListNode *next;
}ListNode;
//反转链表的实现
//无头结点
ListNode* CreateList() {
ListNode*firstnode = new ListNode;
int value;
cin >> value;
firstnode->value = value;
firstnode->next = NULL;
ListNode*prevptr = firstnode;
for (int i = 0; i < 8; i++)
{
ListNode*currptr = new ListNode;
cin >> value;
currptr->value = value;
currptr->next = NULL;
prevptr->next = currptr;
prevptr = currptr;
}
return firstnode;
}
ListNode* ListReverse(ListNode*firstnode)
{
ListNode*prevptr = NULL; //从首结点开始
ListNode*currptr = firstnode; //旧链表当前的地址,从首结点开始
ListNode*temp; //存旧链表下一个结点的地址
while (currptr != NULL)
{
temp = currptr->next;
currptr->next = prevptr;
prevptr = currptr;
currptr = temp;
}
return prevptr;//注意思考
}
int main() {
ListNode*firstnode=CreateList();
ListNode*newfirstnode = ListReverse(firstnode);
cout << "Reversed List:" << endl;
ListNode*temp = newfirstnode;
while (temp != NULL)
{
cout << temp->value << endl;
temp = temp->next;
}
system("pause");
return 0;
}