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 }
  • 相关阅读:
    大工程(bzoj 3611)
    消耗战(bzoj 2286)
    Computer(hdu 2196)
    文件排版(codevs 1300)
    洛谷 P2015 二叉苹果树
    洛谷 P2014 选课
    洛谷 P1352 没有上司的舞会
    COGS 505. 城市
    洛谷 P1306 斐波那契公约数
    洛谷 P1962 斐波那契数列
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/8576151.html
Copyright © 2011-2022 走看看