逆置/反转单链表

来源:互联网 发布:萧山哪里有学编程 编辑:程序博客网 时间:2024/06/05 09:06

头文件:

typedef int DataType;typedef unsigned int size_t;#define NULL 0typedef struct Node{DataType _data;struct Node* _pNext;}Node, *PNode;

源文件:

#include "LinkList.h"#include <assert.h>#include <stdlib.h>#include <stdio.h>// 在单链表的尾部插入一个节点void PushBack(PNode* pHead, DataType data){PNode pCurNode = NULL;PNode pNewNode = NULL;assert(pHead);    pNewNode = BuyNode(data);if(pNewNode == NULL)return;if(*pHead == NULL){*pHead = pNewNode;}else{pCurNode = *pHead;while(pCurNode->_pNext){pCurNode = pCurNode->_pNext;}pCurNode->_pNext = pNewNode;}}// 构建一个新节点Node* BuyNode(DataType data){PNode pNewNode = (Node*)malloc(sizeof(Node));if(pNewNode == NULL)return NULL;pNewNode->_data = data;pNewNode->_pNext = NULL;return pNewNode;}// 正向打印单链表void PrintList(PNode pHead){if(pHead == NULL)return;while(pHead){printf("%d->",pHead->_data);pHead = pHead->_pNext;}printf("NULL\n");} //逆置单链表  PNode ReverseList(PNode* pHead)    {Node* pRevNode = NULL;      Node* pCurNode = NULL;Node* pTempNode = NULL;if(*pHead == NULL || (*pHead)->_pNext == NULL)          return *pHead;pCurNode = *pHead;    while(pCurNode)      {  pTempNode = pCurNode;pCurNode = pCurNode->_pNext;pTempNode->_pNext = pRevNode;          pRevNode = pTempNode;}*pHead = pTempNode;return *pHead;}//销毁单链表,释放空间 void DestroyList(Node* pHead)   {      while(pHead)      {          Node* temp = pHead;  pHead = pHead->_pNext;          free(temp);      }  } 


测试文件:

#include "LinkList.h"#include <stdio.h>void test(){PNode node = NULL;PushBack(&node,1);PushBack(&node,3);PushBack(&node,5);PushBack(&node,4);PushBack(&node,2);PushBack(&node,6);PrintList(node);node = ReverseList(&node);printf("逆置后的链表:\n");PrintList(node);DestroyList(node);}int main(){test();return 0;} 




运行结果:



原创粉丝点击