struct ListNode
{
int m_nvalue;
ListNode* m_pNext;
};
//创建链表
ListNode* CreateListNode(int value)
{
ListNode *pNode = new ListNode();
pNode->m_nvalue = value;
pNode->m_pNext = NULL;
return pNode;
}
//连接链表的两个结点
void ConnectListNode(ListNode* pCurrent,ListNode* pNext)
{
if(pCurrent == NULL)
{
cout<<"前一个节点为空:"<<endl;
exit();
}
else
{
pCurrent->m_pNext = pNext;
}
}
//打印链表信息
void PrintList(ListNode* pHead)
{
ListNode *pNode = pHead;
while(pNode != NULL)
{
cout<<pNode->m_nvalue <<" ";
pNode = pNode->m_pNext ;
}
cout<<endl;
}
ListNode* ReverseList(ListNode* pHead)
{
ListNode* pReverseHead = NULL;
ListNode* pCurrentNode = pHead;
ListNode* pPrev = NULL; //当前结点的前一个结点
while(pCurrentNode != NULL)
{
ListNode* pNext = pCurrentNode->m_pNext ; //将当前结点的下一个结点记录下来,防止链表断开
if(pNext == NULL)
pReverseHead = pCurrentNode;
//将当前结点的后一个结点指向前一个结点
pCurrentNode->m_pNext = pPrev;
//将前一个结点指向当前结点
pPrev = pCurrentNode;
//将当前结点指向后一个结点
pCurrentNode = pNext;
}
return pReverseHead;
}
int main()
{
ListNode* pNode1 = CreateListNode();
ListNode* pNode2 = CreateListNode();
ListNode* pNode3 = CreateListNode();
ListNode* pNode4 = CreateListNode();
ListNode* pNode5 = CreateListNode();
ListNode* pNode6 = CreateListNode();
ListNode* pNode7 = CreateListNode();
ConnectListNode(pNode1,pNode2);
ConnectListNode(pNode2,pNode3);
ConnectListNode(pNode3,pNode4);
ConnectListNode(pNode4,pNode5);
ConnectListNode(pNode5,pNode6);
ConnectListNode(pNode6,pNode7);
PrintList(pNode1);
ListNode* pNode = ReverseList(pNode1);
PrintList(pNode);
}