注册 登录
编程论坛 数据结构与算法

求助,本人是在不会了。链表的某几个操作。

夕痕 发布于 2013-10-21 13:45, 1004 次点击
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <vector>
#include <queue>
#include <stack>
#include <stdlib.h>
#include<malloc.h>
#include <algorithm>
using namespace std;
typedef int ElemType;
typedef struct Lnode
{
    ElemType data;
    struct Lnode *next;
} LNode,*LinkList;
LinkList GreatLinkList()            //建立链表并输出
{
    LinkList p,head,t;
    int n;
    head = (LinkList)malloc(sizeof(Lnode));
    if(!head)
        return 0;
    scanf("%d",&n);
    p = head;
    for(int i=0;i<n;i++)
     {  int e;
        scanf("%d",&e);
        t = (LinkList)malloc(sizeof(Lnode));
        t->data = e;
        p->next = t;
        p = t;

     }
     p->next = NULL;
     for(int i=0;i < n;i++)
        {
            if(i == 1)
                printf("%d",t->data);
            else
                printf("%01d",t->data);
            t = t->next;
        }
     printf("\n");
    return 0;
}
void nizhi(LinkList &l)             //英语不好,直接写汉语拼音
{
    LinkList p,t;
    p = l->next;
  /*  if(!p)
         p = NULL;            */
    l->next = NULL;
    while(p)
    {
        t = p;
        p = p->next;
        t->next = l->next;
        l->next = t;
    }
    p = l->next;
    while(p)
    {
        printf("%d",p->data);
        p = p->next;
    }
    printf("\n");
}

void GetLength(LinkList &l)         //输出长度
{
    LinkList p;
    p = l->next;
    int t=0;
    while(p)
    {
        t++;
        p = p->next;
    }
    printf("%d\n",t);
}
int main()
{
    LinkList l,q,s,t;
    int e,n;
    q=l=GreatLinkList();        //将节点赋给q,l;
  
    GetLength(l);
  //  LinkList GreatLinkList();
 //   nizhi(l);

    return 0;
}
10 回复
#2
yuccn2013-10-21 16:29
LinkList GreatLinkList()            //建立链表并输出
return 0?改成return head试试
#3
qunxingw2013-10-21 16:44
包含头文件好多,
#4
夕痕2013-10-21 19:35
回复 2楼 yuccn
还是不行。
#5
夕痕2013-10-21 19:36
回复 3楼 qunxingw
本人渣渣,干脆把一些能用到的都打上。
#6
zhaogay2013-10-21 23:06
问题貌似不少,没有环境,没有编译,指出几个个人认为要修改的地方:
q=l=GreatLinkList();换成q=(l=GreatLinkList())或者(q=l)=GreatLinkList();应该都是有问题的。
LinkList &l好比int *&val;这样的定义,不知道是什么意思
 GreatLinkList()最后head也没用到,最好把p返回去,虽然return 0;也可以,但是一般会用NULL代替。最后for输出的t在之前应该要赋值的貌似。比如t=p;
for(int i=0;i<n;i++)
      {  int e;这样的,int e要放外面,不然重复定义,编译一般不会通过的貌似;
其他的没有细看,看看编译错误和运行错误,一步步改就好了。
#7
夕痕2013-10-22 16:15
回复 6楼 zhaogay
谢谢讲解那么多。
#8
zitisky2013-10-23 14:54
在LinkList GreatLinkList()函数中,i定义了两次,可以把第二个循环
p->next = NULL;
     for(int i=0;i < n;i++)
        {
            if(i == 1)
                printf("%d",t->data);
            else
                printf("%01d",t->data);
            t = t->next;
        }
中的int去掉,改为
p->next = NULL;
     for(i=0;i < n;i++)
        {
            if(i == 1)
                printf("%d",t->data);
            else
                printf("%01d",t->data);
            t = t->next;
        }
就没有问题了
#9
木头心2013-10-23 18:29
p->next = NULL;
     for(int i=0;i < n;i++)
        {
            if(i == 1)
                printf("%d",t->data);
            else
                printf("%01d",t->data);
            t = t->next;
        }
这里t指的是第三个节点  t=t->next; 为空,无法输出在i=1是输出t->data的值,出现错误
#10
夕痕2013-10-26 21:32
回复 8楼 zitisky
真心谢谢了!
#11
zerolu2013-11-01 11:35
1、head = (LinkList)malloc(sizeof(Lnode));我觉得sizeof(Lnode)里的n应该是大写N;
2、return 0;而且不能返回0,应该返回head;
3、for(int i=0;i < n;i++)
        {
            if(i == 1)
                printf("%d",t->data);
            else
                printf("%01d",t->data);
            t = t->next;
        }
我觉得这段代码没什么用,t->next已经是NULL了,我不知道折代码是想做什么
4、void nizhi(LinkList &l) 我觉得不应该这么写,void nizhi(LinkList l);同样void GetLength(LinkList &l)也是;
1