zoukankan      html  css  js  c++  java
  • 数据结构学习笔记(2)——链表创建和链表遍历

    说明(2018-3-15 20:34:49):

    1. 开始将pNew挂到pHead后面,会有问题,每个新生成的节点都挂到了pHead后面。

    2. 然后改为,新建一个pTail尾节点,让它等于pHead,然后每次生成一个新节点,就让这个pTail等于这个新节点,以便下一个新节点能够挂到这个pTail尾节点上,也就是上一个旧节点。

     1 #include<stdio.h>
     2 #include<malloc.h>
     3 #include<stdlib.h>
     4 #pragma warning(disable:4996)
     5 
     6 
     7 typedef struct Node
     8 {
     9     int data;//数据域
    10     struct Node * pNext;//指针域
    11 }NODE, *pNODE;
    12 pNODE CreateList();
    13 void TraverseList(pNODE pHead);
    14 void main()
    15 {
    16     pNODE pHead = CreateList();//生成一个链表,把链表中第一个节点的地址赋给pHead
    17     TraverseList(pHead);//遍历链表,输出每个节点数据
    18     system("pause");
    19 }
    20 
    21 pNODE CreateList()
    22 {
    23     int len;
    24     printf("请输入链表的长度:
    ");
    25     scanf("%d", &len);
    26     int val;//临时存放每个节点的数据
    27     pNODE pHead = (pNODE)malloc(sizeof(NODE));
    28     pNODE pTail = pHead;//pTail,pHead两个都指向了头结点
    29     pTail->pNext = NULL;//这一句要加上,把头结点的指针域清空,以便节点为0时,遍历的参数pHead->pNext为NULL。这样的话就保证了pTail永远指向了尾节点
    30     if (pHead == NULL)
    31     {
    32         printf("内存分配失败!");
    33         exit(-1);
    34     }
    35     for (int i = 0; i < len; i++)
    36     {
    37         pNODE pNew = (pNODE)malloc(sizeof(NODE));//为新的节点分配内存,是一个临时节点,避免每一个节点重新起名
    38         //pNODE pTail = (pNODE)malloc(sizeof(NODE));//设置一个尾指针,存放最后一个节点的地址
    39         if (pNew == NULL)
    40         {
    41             printf("内存分配失败!");
    42             exit(-1);
    43         }
    44         printf("请输入第%d个节点的数据:
    ", i + 1);
    45         scanf("%d", &val);
    46         pNew->data = val;//新节点的数据域赋值
    47         //下面三句最重要!!!
    48         pTail->pNext = pNew;//尾节点指针域指向了新节点的指针pNew
    49         pNew->pNext = NULL;//新节点的指针域清空,因为最后一个节点的指针域应该是空的
    50         pTail = pNew;//尾节点的指针等于这个新节点的指针,方便下一个新节点挂在旧节点之后
    51     }
    52     return pHead;
    53 }
    54 
    55 void TraverseList(pNODE pHead)
    56 {
    57     pNODE p = pHead->pNext;
    58     while (p != NULL)
    59     {
    60         printf("%d ", p->data);
    61         p = p->pNext;
    62     }
    63     return;
    64 }
  • 相关阅读:
    Android 6.0 运行时权限处理完全解析
    Android 6.0 运行时权限处理
    史上比较用心的纯代码实现 AutoLayout
    hdu 4268 Alice and Bob(multiset|段树)
    在单调的队列
    Python re正则表达式
    minihomepage.exe 百度视频迷你主页
    POJ 2914 Minimum Cut 最小割图论
    移植kl档,但调用默认Generic.kl解决的方法
    iOS 删除黑色边框线导航栏&amp;删除搜索框的阴影边界线和中黑色文本输入框 - 解
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/8576151.html
Copyright © 2011-2022 走看看