| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1046 人关注过本帖
标题:链表的插入操作 有一步没搞懂 求解
只看楼主 加入收藏
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:2 
链表的插入操作 有一步没搞懂 求解
为什么在插入函数中总是以r==NULL跳出循环而不是以j<i跳出

#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node
{
    ElemType data;
    struct Node* next;
}Node,*LinkList;
LinkList GreateFormHead(LinkList L);
int ListLength(LinkList L);
LinkList InitList(LinkList L);
void InsList(LinkList L,ElemType e,int i);
void print(LinkList L);
int main()
{
    int i=3;
    char c='y';
   
    LinkList L1;
    L1=InitList(L1);//这里得出重要结论:凡是要对链表进行操作时都要返回头指针点
    L1=GreateFormHead(L1);
    print(L1);
    printf("\n");
   
    printf("链表的长度为:%d",ListLength(L1));
    printf("\n");
   
    if(L1==NULL)
        printf("头指针为空\n");
    else
        printf("头指针不为空\n");
            
    InsList(L1,c,i);
    print(L1);
    printf("\n");
     
    return 0;
}
LinkList GreateFormHead(LinkList L)
{
    char c;
    int flag=1;
    while(flag)
    {
        Node* s;
        printf("请输入字符\n");
        c=getchar();
        getchar();
        if(c!='$')
        {
            s=(Node*)malloc(sizeof(Node));
            s->data=c;
            s->next=L->next;
            L->next=s;
        }
        else
                flag=0;
    }
    return L;
}

int ListLength(LinkList L)
{
    int j=0;
    Node *p;
    p=L->next;
    while(p!=NULL)
    {
        p=p->next;
        j++;
    }
    return j;
}
void InsList(LinkList L,ElemType e,int i)
{
    if(i<0)
        printf("插入位置错误\n");
    Node *s,*r;
    //Node* r;
    int j=0;
    s=(Node*)malloc(sizeof(Node));
    r=L;
    while(r!=NULL&&j<i)
        r=r->next;
        j++;
    if(r==NULL)
        printf("插入位置不在链表内\n");
   
    s->data=e;
    s->next=r->next;
    r->next=s;   
}
LinkList InitList(LinkList L)
{
    L=(LinkList)malloc(sizeof(Node));
    L->next=NULL;
}
void print(LinkList L)
{
    Node *p;
    p=L->next;
    while(p!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("\n");
}

搜索更多相关主题的帖子: NULL Node next int printf 
2018-04-18 15:00
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:20 
大意就是说要判断链表指向末尾~

不知道为啥这个代码InsList那里的while循环漏了个花括号(应该是改过正常来说应该是有括号的),加了就可以了~

程序代码:
void InsList(LinkList L,ElemType e,int i)
{
    if(i<0)
        printf("插入位置错误\n");
    Node *s,*r;
    //Node* r;
    int j=0;
    s=(Node*)malloc(sizeof(Node));
    r=L;
    while(r!=NULL&&j<i)
    {
        r=r->next;
        j++;
    }    
    if(r==NULL)
        printf("插入位置不在链表内\n"); 
    
    s->data=e;
    s->next=r->next;
    r->next=s;    
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-04-18 16:51
堃周
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-6
收藏
得分:0 
回复 2楼 九转星河
对,就是这样的 哎!
还是非常感谢
2018-04-18 21:49
快速回复:链表的插入操作 有一步没搞懂 求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033486 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved