| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1141 人关注过本帖
标题:c语言 对链表的就地逆置的代码运行不了 求大神看看
只看楼主 加入收藏
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:2 
c语言 对链表的就地逆置的代码运行不了 求大神看看
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;   //用户自定义数据类型  
typedef struct lnode
{
    Elemtype data;
    struct lnode *next;
}lnode, *linklist;  //结点类型  
void Initlist_L(linklist &L);
void Createlist_L(linklist &L, int n);
void Print_L(linklist L);
void Inverse(linklist &L);
    int main(void)
{
        int  len; linklist L; Initlist_L(L);  //通过函数分配内存空间  
        printf("请输入建立的链表的长度:\n");
        scanf("%d", &len);
        Createlist_L(L, len);   //建立含len个结点的链表  
        Print_L(L);
        Inverse(L);
        Print_L(L);
        system("pause");
        return 0;
}
void Initlist_L(linklist &L)
{
        L = (linklist)malloc(sizeof(lnode));
        if (L == NULL)
            exit(1);
        L->next = NULL;
}
void Createlist_L(linklist &L, int n)
{//头插法  
        int i;
        linklist s; //这里相当于 lnode *s;  
        if (L == NULL)
            exit(3);
        printf("请你输入%d个整数:\n", n);
        for (i = 0; i<n; i++)
        {
            s = (linklist)malloc(sizeof(lnode));
            if (s == NULL)  //判断s分配空间是否成功  
                exit(4);
            scanf("%d", &s->data);
            s->next = L->next;
            L->next = s;
        }
}
void Print_L(linklist L)
{
    printf("当前链表头指针指向的值为:\n");
    linklist p = L->next;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}
void Inverse(linklist &L)
/* 对带头结点的单链表L实现就地逆置 */
{
    linklist last, cur, q;
    q = L->next; //保存首元素地址  
    last = L->next;//上一个指针  
    cur = L->next; //当前操作的指针  
    if (cur){
        while (cur){//此处没注意,写成了!cur,大意失荆州啊!   
            cur = L->next;
            L->next = cur->next;
            cur->next = last;
            if (cur){ last = cur; }
        }
        L->next = last;
        q->next = NULL;
    }
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include c语言 空间 用户 
2016-04-04 10:02
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:20 
程序代码:
void Inverse(linklist &L)
/* 对带头结点的单链表L实现就地逆置 */
{
    linklist s,p,tmp;
    p=L->next->next;
    s=L->next;
    while(p){
      tmp=p->next;
      p->next=s;
      s=p;
      p=tmp;
    }
    L->next->next=NULL;
    L->next=s;
}

未佩好剑,转身便已是江湖
2016-04-04 10:45
润润编程
Rank: 1
来 自:广东省
等 级:新手上路
帖 子:20
专家分:0
注 册:2015-11-2
收藏
得分:0 
回复 2楼 alice_usnet
图片附件: 游客没有浏览图片的权限,请 登录注册

非常感谢!!!

编程破防线
2016-04-04 11:07
快速回复:c语言 对链表的就地逆置的代码运行不了 求大神看看
数据加载中...
 
   



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

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