c - 单链表初始化数据为什么是倒序进去的?

查看:71
本文介绍了c - 单链表初始化数据为什么是倒序进去的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

学习数据结构,遇到问题,代码如下:

#include <stdio.h>
#include <stdlib.h>
//用结构体定义单链表
typedef int ElementType;
typedef struct Lnode {
    ElementType num;
    ElementType passwd;
    struct Lnode * next;
}Lnode;
typedef Lnode * Llist;//定义了单链表指针类型Llist
/*----------------------获得当前表长----------------------*/
int Llength(Llist L){
    Llist p;
    int i = 0;
    p = L;
    while (p->next != NULL) {
        i++;
        p = p->next;
    }
    return i;
}
int main(int argc, const char * argv[]) {
    Llist L,p,head;
    L = (Llist)malloc(sizeof(Lnode));
    //初始化单链表
    L->next = NULL;
    //置空单链表
    int m = 20; //初始密码为20
    int n = 7; //初始人数为7人
    int pass[7] = {3,1,7,2,4,8,4}; //7个人各自的密码
    //默认数据导入完成
    for (int i = 0; i < n; i++) {
        p = (Llist)malloc(sizeof(Lnode));
        p->passwd = pass[i]; //初始化表中的密码
        p->num = i+1; //初始化密码相对应的编号
        p->next = L->next;
        L->next = p; //移动指针指向下个元素
    }
    //初始化表完成
    head = L->next; //设置头指针head指向表
    printf("%d \n", head->num);
    printf("%d \n", head->passwd);
    return 0;
}

输出7 和 4 为什么第一个元素变成了我测试数据的最后一个元素,是倒序进入链表的,找不到问题,请大神帮忙看下,谢谢.代码是在Xcode中运行出这样的结果的.

解决方案

您好啊,我看了看这个代码,我觉得问题是这样的:是你的写法决定了他就是这样的。我大概画了一下您的这个程序的节点连接的过程,您看一下吧。图中的P节点按生成的先后顺序记为P1,P2,P3.....

最后就是这样的啦

所以就是倒着输入的链表中哦

这篇关于c - 单链表初始化数据为什么是倒序进去的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆