逆置/反转单链表

来源:互联网 发布:telnet 端口号不通 编辑:程序博客网 时间:2024/05/24 03:17

思路:摘结点法



//逆置/反转单链表#include<iostream>using namespace std;typedef int DataType;typedef struct SListNode{DataType data;            //数据struct SListNode * next;   //指向下一个结点的指针}SListNode;SListNode* CreateNode(DataType x)  //创造结点{//1.先开辟空间 2.数据赋给data 3.指针置空SListNode* NewNode = (SListNode *)malloc(sizeof (SListNode));NewNode->data = x;NewNode->next = NULL;return NewNode;}void PushBack(SListNode * &ppHead, DataType Data){//1.none 2.one and moreif (ppHead == NULL){ppHead = CreateNode(Data);}else{//1.先找到尾结点 2.把新节点链起来SListNode* cur = ppHead;while (cur->next){cur = cur->next;}cur->next = CreateNode(Data);}}//打印void PrintSNodeList(SListNode *&ppHead){while (ppHead){printf("%d->", ppHead->data);ppHead = ppHead->next;}cout << "NULL" << endl;}//逆置/反转单链表SListNode* ReverseList(SListNode*& pHead){//摘结点法SListNode* cur = pHead;  SListNode* newHead = NULL;  //创建一个新头结点while (cur){SListNode* tmp = cur;  //tmp指向curcur = cur->next;//cur指向下一个tmp->next = newHead;    //1.第一次tmp->next=NULL 2.以后每次利用tmp把结点和newHead连起来newHead = tmp;   //再把头结点向前移}return newHead;}void Test(){SListNode* pHead = NULL;PushBack(pHead, 1);PushBack(pHead, 2);PushBack(pHead, 3);PushBack(pHead, 4);PushBack(pHead, 5);PushBack(pHead, 6);PushBack(pHead, 7);PushBack(pHead, 8);SListNode* newHead=ReverseList(pHead);PrintSNodeList(newHead);}int main(){Test();system("pause");return 0;}




1 0
原创粉丝点击