博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表逆序的原理及实例
阅读量:4095 次
发布时间:2019-05-25

本文共 1419 字,大约阅读时间需要 4 分钟。

http://blog.csdn.net/wangqing_12345/article/details/51757294

尾插法建立链表,带头结点
设链表节点为
typedef struct node {
    int data;
    struct node *next;
}node_t, *pnode_t;

要求将一带链表头List head的单向链表逆序。

分析:

  1). 若链表为空或只有一个元素,则直接返回;

  2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;

  3). 重复2),直到q为空

  4). 调整链表头和链表尾

示例:以逆序A->B->C->D为例,图示如下

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define LEN 10
  5. typedef struct node {
  6.     int data;
  7.     struct node *pnext;
  8. } node_t, *pnode_t;
  9. pnode_t create_link()
  10. {
  11.     int i;
  12.     pnode_t phead;
  13.     phead = (pnode_t)malloc(sizeof(node_t));     
  14.     if (phead == NULL) {
  15.         printf("malloc fail.\n");
  16.         exit(-1);
  17.     }
  18.     memset(phead, 0, sizeof(node_t));
  19.     pnode_t ptail = phead;
  20.     for (= 0; i < LEN; i++) {
  21.         pnode_t    pnew = (pnode_t)malloc(sizeof(node_t));
  22.         if (pnew == NULL) {
  23.             printf("malloc fail.\n");
  24.             exit(-1);
  25.         }
  26.         memset(pnew, 0, sizeof(node_t));
  27.         pnew->data = i+1;
  28.         pnew->pnext = NULL;
  29.         ptail->pnext = pnew;
  30.         ptail = pnew;
  31.     }
  32.     return phead;
  33. }
  34. void print_link(pnode_t phead)
  35. {
  36.     pnode_t p = phead->pnext;
  37.     while (!= NULL) {
  38.         printf("%d ", p->data);
  39.         p = p->pnext;
  40.     }
  41.     printf("\n");
  42. }
  43. void reverse_link(pnode_t phead)
  44. {
  45.     pnode_t p, q, ptmp;
  46.     p = phead->pnext;
  47.     q = phead->pnext->pnext;
  48.     ptmp = NULL;
  49.     while (!= NULL) {
  50.         ptmp = q->pnext;
  51.         q->pnext = p;
  52.         p = q;
  53.         q = ptmp;
  54.     }
  55.     phead->pnext->pnext = NULL;
  56.     phead->pnext = p;
  57. }
  58. int main(int argc, char *argv[])
  59. {
  60.     pnode_t phead = NULL;
  61.     phead = create_link();
  62.     print_link(phead);
  63.     reverse_link(phead);
  64.     print_link(phead);
  65.     return 0;
  66. }
 

你可能感兴趣的文章
c++ 发邮件(含附件)
查看>>
Window设置Wifi热点的脚本
查看>>
telnet实现简单的邮件发送
查看>>
dos编程详解
查看>>
程序员的职业规划
查看>>
c++ 实现python的split,strip函数
查看>>
c++使用Eigen库计算矩阵特征值
查看>>
VS调试时查看动态数组的全部元素
查看>>
ls -l 每一列的含义
查看>>
安装广告拦截插件abp
查看>>
python处理打卡数据的excel表格
查看>>
Linux虚拟机与本地机共享文件夹
查看>>
[JS] 格式化时间长度(formatDuration)
查看>>
[JS] 变量提升
查看>>
[JS] 检查一个对象是否可迭代
查看>>
Java访问类中的私有成员(private member)
查看>>
输出一个集合所有子集的元素和(Print sums of all subsets of a given set)
查看>>
Java中的迭代器(Iterators in Java)
查看>>
Ubuntu 16.04中安装Vim 8.0
查看>>
Java中的迭代器(Iterators in Java)
查看>>