| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 384 人关注过本帖
标题:光说不练
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
已结贴  问题点数:10 回复次数:8 
光说不练
老师问
List *FindKth( int K, List *PtrL )
{     List  *p = PtrL;
       int  i = 1;
       while (p !=NULL && i < K ){
              p = p->Next;
              i++;  
       }
       if(i == K) return p;    /*找到第K个,返回指针*/
       else  return NULL;    /* 否则返回空 */
}
中的判断语句改为:
if (p==NULL) return NULL;
else return p;
或者说直接简化为:return p;
这样是否正确,讨论的人多就是没人写代码,自己写了个,虽然不知道有没有错。
程序代码:
#include<stdio.h>
#include<stdlib.h>

struct node
{
    int data;
    struct node *next;
};
typedef struct node lnode;
typedef struct node *list;

list creat()//尾插法建立带表头的链表
{
    list tempnode,head;
    list s;
    int i,N,a;//共N个元素

    printf("请输入元素个数\n");
    scanf("%d",&N);

    head=(list)malloc(sizeof(lnode));
    head->next=NULL;
    printf("请输入数据\n");

    for(i=1;i<=N;i++)
    {
        scanf("%d",&a);
        tempnode=(list)malloc(sizeof(lnode));

        tempnode->data=a;
        tempnode->next=NULL;

        if(head->next==NULL)
            head->next=tempnode;
        else
            s->next=tempnode;

        s=tempnode;    
    }
    return head;
}


//按序号查找,第K个元素
list find(int k,list head)
{
    int i=1;
    list p=head;
    while(i<k&&p->next!=NULL)//表不为空,并且未找到k
    {
        p=p->next;
        i++;
    }
    if(i==k)    return p->next;
    else return NULL;
}
//按序号查找第k个元素,第二种形式
list find_2(int k,list head)
{
    int i=1;
    list p=head;
    while(i<k&&p->next!=NULL)//表不为空,并且未找到k
    {
        p=p->next;
        i++;
    }
    if(p->next==NULL)    return NULL;
    else return p->next;
}


list find_3(int k,list head)
{
    int i=1;
    list p=head;
    while(i<k&&p->next!=NULL)//表不为空,并且未找到k
    {
        p=p->next;
        i++;
    }
    return p->next;
}


void output(list head)
{
    list s=head;
    while(s->next!=NULL)
    {    
        printf("%d ",s->next->data);
        s=s->next;
    }
    printf("\n");
}


void main()
{
    list head,s;
    int k;
    head=creat();
    
    printf("请输入查找序号\n");
    scanf("%d",&k);

    printf("输出该链表\n");
    output(head);

    s=find(k,head);
    printf("第一种查找方式输出第k个结点的数据\n");
    printf("%d\n",s->data);            //输出第k个结点的数据

    s=find_2( k,head);
    printf("第二种查找方式输出第k个结点的数据\n");
    printf("%d\n",s->data);

    s=find_3( k,head);
    printf("第三种查找方式输出第k个结点的数据\n");
    printf("%d\n",s->data);

}
2015-09-24 23:36
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:5 
结果怎么样

一片落叶掉进了回忆的流年。
2015-09-24 23:44
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 2楼 诸葛欧阳
结果是三种方法都对,我当时就觉得都对的,应该没有编错
2015-09-24 23:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
你為什麼不測試一下單結點鏈表的情形?想當然鏈表總有多於一個結點罷了。

授人以渔,不授人以鱼。
2015-09-27 14:08
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 4楼 TonyDeng
这个不是单链表吗??
2015-09-27 21:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我說的是單結點鏈表,當整個鏈表衹有一個結點時,會如何?

授人以渔,不授人以鱼。
2015-09-27 21:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果所要找的元素恰好是最後一個結點呢?

授人以渔,不授人以鱼。
2015-09-27 22:12
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 7楼 TonyDeng
最后一个结点的情况我以前试过,可以,只有一个节点的刚刚试了一下也可以。
不过倒是出现了我没想到的情况。
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
2015-09-28 00:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1樓老師問代碼改成那樣行不行,事實那樣改是錯的。你前面的測試以為通了,其實是沒測試完整。學會測試,擅長測試,找到測試程序的好辦法,比學什麼高深算法都強。本來,這個問題,從邏輯思考就可以判斷那樣改是錯的,可陷阱正是讓人覺得那很巧妙,偏生就錯了,這對不願寫直接代碼的人來說是很強的警醒,希望你能從這裡學到真正的東西。

授人以渔,不授人以鱼。
2015-09-30 15:05
快速回复:光说不练
数据加载中...
 
   



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

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