首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

单链表头插法和尾插法的诡异结果!请朋友们帮忙看下.解决办法

2012-02-23 
单链表头插法和尾插法的诡异结果!请朋友们帮忙看下.运行结果:----------------------------------------尾

单链表头插法和尾插法的诡异结果!请朋友们帮忙看下.
运行结果:
----------------------------------------
尾插法建立单链表:
123$
->1->2->3
单链表结束!
单链表L的长度为:3
头插法建立单链表...
123$
->3->2->1->

单链表结束!
单链表s的长度为:4
-----------------------------------------
main函数中,CreatFromHead和CreatFromTail两行代码,不论谁放在后边,输出时总是有个换行,链表长度+1,找了一下午,实在找不到问题,所以请教各位朋友有空帮忙看一下!谢谢!

C/C++ code
#include <iostream>using namespace std;/*    单链表的基本操作  */typedef char ElemType;typedef struct Node{    ElemType data;    struct Node *next;}Node,*LinkList;    //LinkList为结构类型指针//------建立单链表:头插法------LinkList CreatFromHead(){    cout<<"头插法建立单链表..."<<endl;    LinkList L;    Node *s;    ElemType c;    int flag=1;    //设置一个标志变量flag,初值为1,当输入'$'时,将flag设置为0,建表结束    L = (Node *)malloc( sizeof(Node) );    //为头结点分配存储空间    L->next = NULL;        while(flag)    {        c=getchar();        if(c != '$')        {            s = (Node *)malloc(sizeof(Node));    //为读入的字符分配存储空间            s->data=c;            s->next=L->next;            L->next=s;        }        else        {            flag = 0;    //建表结束        }            }//while    return L;} //CreatFromHead//------建立单链表:尾插法------LinkList CreatFromTail(){    cout<<"尾插法建立单链表:"<<endl;    int flag=1;    ElemType c;    Node *r,*s;    LinkList L;    L=(Node*)malloc(sizeof(Node));    //为头结点分配存储空间    L->next=NULL;    r=L;    //r始终动态指向链表的当前表尾,以便于做表尾插入,其初值指向头结点    while(flag)    {        c=getchar();        if(c!='$')        {            s = (Node*)malloc(sizeof(Node));            s->data=c;            r->next=s;            r=s;        }        else        {            flag = 0;            r->next=NULL;        }    }//while    return L;}//CreatFromTail//------单链表的遍历及输出------void Traverse(LinkList L){    Node *p = L->next;    while(p != NULL)    {        cout<<"->"<<(p->data);        p = p->next;    }//while    cout<<"\n单链表结束!\n";} //Traverse//------单链表的长度------int ListLength(LinkList L){    Node *p;    p=L->next;    int j=0;    while(p != NULL)    {        p=p->next;        j++;    }    return j;}//ListLengthint main(){    LinkList L=CreatFromTail(); //尾插法    Traverse(L);    cout<<"单链表L的长度为:"<<ListLength(L)<<endl;    LinkList s=CreatFromHead(); //头插法    Traverse(s);    cout<<"单链表s的长度为:"<<ListLength(s)<<endl;    return 0;}


[解决办法]
尾插法建立单链表:
123$(这里有个回车符,会读入到下一个输入中去)
->1->2->3
单链表结束!
单链表L的长度为:3
头插法建立单链表...
123$
->3->2->1->

单链表结束!
单链表s的长度为:4

//你直接第一次一次性输完就对了123$123$

[解决办法]
你在屏幕出现“头插法建立单链表.....”之后按了回车键,相当于最开始输入链表的第一个元素是回车键,即实际上链表共有四个元素(3 2 1 \n),所以会多一行,并且长度为4

热点排行