单链表插入

C语言 码拜 8年前 (2017-04-25) 1178次浏览
void InsertList(LinkList L,int e)
{
    if(L==NULL)
    {
        printf("线性表为空");
        return ERROR;
    }
    int i=0;
    Node *s,*p,*ptr;
    s=(Node *)malloc(sizeof(Node));
    p=L;
    s->data=data;
    while((p->data<data)&&(p->next!=NULL))
    {
        ptr=p;
        p=p->next;
        i++;
    }
    if(p->data>=data)
    {
        if(p=L)
        {
            s->next=p;
            L->next=s;
        }
        else
        {
            s->next=p;
            ptr->next=s;
        }
    }
    else
    {
        p->next=s;
        s->next=NULL;
    }
    printf("插入成功");
}

这个是别人的代码  本人着实看不懂是什么意思!
1.while((p->data<data)&&(p->next!=NULL))中p->data<data是什么意思啊?
2.ptr=p;为什么要引入ptr啊?
4.if(p->data>=data)这个又是什么?
然后为什么又要分出来p=L的情况?
好蒙圈 啊  !

解决方案

10

你确定你的第二个参数是int e而不是int data?
PS:而且21行少了个=

2

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

3

引用:
Quote: 引用:

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

void InsertList(LinkList L,int e)
en   是的  形参本人打错了  但是改成data 还是不太懂

你不懂的是p->data  <  data ? 这句么?

3

引用:
Quote: 引用:

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

void InsertList(LinkList L,int e)
en   是的  形参本人打错了  但是改成data 还是不太懂

p->data  <  data 就是把你传进来的形参数据 data  和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据  小于 形参传进来的数据    则进到if语句里面(当然 p->data < data 只是其中一个条件)

3

引用:
Quote: 引用:
Quote: 引用:

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

void InsertList(LinkList L,int e)
en   是的  形参本人打错了  但是改成data 还是不太懂

p->data  <  data 就是把你传进来的形参数据 data  和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据  小于 形参传进来的数据    则进到if语句里面(当然 p->data < data 只是其中一个条件)

引用:
Quote: 引用:
Quote: 引用:

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

void InsertList(LinkList L,int e)
en   是的  形参本人打错了  但是改成data 还是不太懂

p->data  <  data 就是把你传进来的形参数据 data  和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据  小于 形参传进来的数据    则进到if语句里面(当然 p->data < data 只是其中一个条件)

刚才看错了 不是if 语句 是while里面    其实都是一样的 while(表达式){  }  当while 小括号里面的表达式 为真时 就会一直循环 直到表达式的值为假时 才会跳出循环

3

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

void InsertList(LinkList L,int e)
en   是的  形参本人打错了  但是改成data 还是不太懂

p->data  <  data 就是把你传进来的形参数据 data  和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据  小于 形参传进来的数据    则进到if语句里面(当然 p->data < data 只是其中一个条件)

引用:
Quote: 引用:
Quote: 引用:

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

void InsertList(LinkList L,int e)
en   是的  形参本人打错了  但是改成data 还是不太懂

p->data  <  data 就是把你传进来的形参数据 data  和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据  小于 形参传进来的数据    则进到if语句里面(当然 p->data < data 只是其中一个条件)

刚才看错了 不是if 语句 是while里面    其实都是一样的 while(表达式){  }  当while 小括号里面的表达式 为真时 就会一直循环 直到表达式的值为假时 才会跳出循环

那后面怎么又出来一个p->data>=data呢?是它为假跳出循环时的条件嘛?

根据你这个代码 本人感觉是对一个已有的有序链表进行有序插入,  所以需要对插入数据 进行大小判断。
前面的循环是用来定位当前数据该插入的数据, 例如你对1 3 5 7 9 这个链表要进行插入, 插入数据为6  他就先需要逐一判断
1357然后把数据插入到5和7之间,  最后的那个if 是用来判断链表末尾的,也就是说 假如你插入的数据,比链表里全部的数据都大,则把它放在最后一项。

3

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

void InsertList(LinkList L,int e)
en   是的  形参本人打错了  但是改成data 还是不太懂

p->data  <  data 就是把你传进来的形参数据 data  和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据  小于 形参传进来的数据    则进到if语句里面(当然 p->data < data 只是其中一个条件)

引用:
Quote: 引用:
Quote: 引用:

楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了   代码本身有问题。 把e改成data 应该就能看懂了吧

void InsertList(LinkList L,int e)
en   是的  形参本人打错了  但是改成data 还是不太懂

p->data  <  data 就是把你传进来的形参数据 data  和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据  小于 形参传进来的数据    则进到if语句里面(当然 p->data < data 只是其中一个条件)

刚才看错了 不是if 语句 是while里面    其实都是一样的 while(表达式){  }  当while 小括号里面的表达式 为真时 就会一直循环 直到表达式的值为假时 才会跳出循环

那后面怎么又出来一个p->data>=data呢?是它为假跳出循环时的条件嘛?

根据你这个代码 本人感觉是对一个已有的有序链表进行有序插入,  所以需要对插入数据 进行大小判断。
前面的循环是用来定位当前数据该插入的数据, 例如你对1 3 5 7 9 这个链表要进行插入, 插入数据为6  他就先需要逐一判断
1357然后把数据插入到5和7之间,  最后的那个if 是用来判断链表末尾的,也就是说 假如你插入的数据,比链表里全部的数据都大,则把它放在最后一项。

最后的那个if(p->data >=data) 是在循环外面的 所以不是跳出循环。(循环的有效范围是循环本身的{}  )

6

原因是p要后移,所以引入ptr来保存p当前指向的结点的地址,保存这个地址后面会用到

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明单链表插入
喜欢 (0)
[1034331897@qq.com]
分享 (0)