单链表原地逆序

来源:互联网 发布:james blunt知乎 编辑:程序博客网 时间:2024/05/16 16:00

通过改变指针指向来完成逆序
这里写图片描述
程序清单:

#include <iostream>using namespace std;typedef struct Node{    char c;    struct Node *next;}Node, *LinkList;//打印单链表void PutOut(LinkList H){    LinkList p;    p = H->next;    while (p)    {        cout << p->c << "  ";        p = p->next;    }    cout << endl;}void ReserveList(LinkList H){    Node *_pre, *_cur, *_next;//分别表示前一个指针,当前指针,下一个指针    _pre = NULL;    _cur = H->next;//使当前指针指向第一个有意义的值(头指针不参与逆序)    while (_cur)    {        _next = _cur->next;//下一个指针在当前指针之后        _cur->next = _pre; //使当前指针指向前一个指针        _pre = _cur;       //使前一个指针后移指向当前指针        _cur = _next;      //使当前指针后移    }    H->next = _pre;//遍历完后pre指向第一个结点,使头结点指向它便可输出逆序后的结果}int main(void){    LinkList H = new Node();    Node d = { 'd', NULL };    Node c = { 'c', &d };    Node b = { 'b', &c };    Node a = { 'a', &b };    H->next = &a;    printf("原顺序为: ");    PutOut(H);    printf("逆序顺序: ");    ReserveList(H);    PutOut(H);    printf("\n");    return 0;}

运行截图:
这里写图片描述

原创粉丝点击