| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 721 人关注过本帖
标题:折腾到现在,快1点了
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
 问题点数:0 回复次数:14 
折腾到现在,快1点了
今天想写个原地反转链表的代码,想了三种方法,先试写第一种。
head ABCD NULL先变为head BCDA NULL再变为head CDBA NULL。。。。。如此变换
花了很长时间不过我觉得值了,以后得先思考所用的方法需要那些变量而不是盲目的敲代码。

当然for语句中的for敲成了while,找错找了好长时间,这个时间花的不值。
2015-09-29 00:57
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用令狐少侠56在2015-9-29 00:57:04的发言:

今天想写个原地反转链表的代码,想了三种方法,先试写第一种。
head ABCD NULL先变为head BCDA NULL再变为head CDBA NULL。。。。。如此变换
花了很长时间不过我觉得值了,以后得先思考所用的方法需要那些变量而不是盲目的敲代码。

当然for语句中的for敲成了while,找错找了好长时间,这个时间花的不值。


怎么感觉这样变运行效果达不到,多余操作也很多

剑栈风樯各苦辛,别时冰雪到时春
2015-09-29 07:12
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
应该是快8点了

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-09-29 07:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
小胡說,不要瞎折騰。該睡就睡,睡醒了啊哈靈機一動,問題自然解決。

授人以渔,不授人以鱼。
2015-09-29 21:27
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 2楼 林月儿
写起来是比较烦。
程序代码:
#include<stdio.h>
#include<stdlib.h>

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


list creat()
{
    int N;
    int i,a;

    list tempnode,q;
    list head;

    printf("请输入链表结点个数\n");
    scanf("%d",&N);
    
    head=NULL; 

    printf("请输入数据\n");

    for(i=1;i<=N;i++)    //尾插法建立单链表,无表头
    {
        tempnode=(list)malloc( sizeof(lnode) );
        tempnode->next=NULL;
        scanf("%d", &a);
        tempnode->data=a;
        

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

            q=tempnode;
    }    

    return head;
}



list reverse(list head)//原地反转
{

        list tailnode,p,q;
        tailnode=head;
        p=head;
        q=NULL;

        while(tailnode->next!=NULL)  tailnode=tailnode->next;//找到链表尾结点

        while(p!=tailnode)
        {
            head=p->next;//记住p->next所指向的位置
            
            //未反转的链表第一个结点插入到已反转链表的第一个位置
            tailnode->next=p;
            if(q==NULL) p->next=NULL;
            else p->next=q;

            q=p;//记住已反转链表的第一个结点

            p=head;

        }
        return head;

}


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


int main()
{
    list list_1,list_reverse;

    list_1=creat();
    output(list_1);

    list_reverse = reverse( list_1 );

    
    output(list_reverse);

    return 0;

}
2015-09-29 21:47
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 4楼 TonyDeng
。。。下次不这样了。。。
2015-09-29 21:48
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 3楼 hu9jj
努力成为优秀的程序员。。。。
2015-09-29 21:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
有時是需要主動睡覺的。我說“睡覺”的意思,是主動放鬆,把注意力從編程上引開,起來泡壺茶喝,出去走走,做點別的事,然後回來,往往之前死啃不下的,很自然地打通了。編程是藝術,不靠死啃的,也沒有包打天下的萬金油技能,更沒有屠龍術,靈動更重要!

授人以渔,不授人以鱼。
2015-09-29 22:01
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
p=p->next;
这是个啥意思来着

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-09-30 14:56
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
链表,很久不用的东西了,我要是写这个程序,肯定很偷懒,先把链表转化成数组,然后用reverse函数倒叙一下,然后再把数组转化成链表

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-09-30 15:01
快速回复:折腾到现在,快1点了
数据加载中...
 
   



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

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