鱼C论坛

 找回密码
 立即注册
查看: 4751|回复: 13

链表问题

[复制链接]
发表于 2015-12-28 00:16:33 | 显示全部楼层 |阅读模式
35鱼币
本帖最后由 独一无② 于 2016-1-26 14:36 编辑

将一数据链表中数据  小于零的数都 转移到 正数前面

如  输入 -x -x x x -x x
     输出-x -x -x x x x

如何转移 这部分想不出来,只会创建这部分
# include <stdio.h>
# include <stdlib.h>
struct node
{
        int data;
        struct node *next;
};
int main()
{
        struct node *head,*p,*q,*t;
        int i,j,k;
        char str[50];
        head=NULL;
        scanf("%d",&j);
        while(j--)
        {
                p=(struct node*)malloc(sizeof(struct node));
                scanf("%d",&i);
                p->data=i;
                p->next=NULL;
                if(head == NULL)
                  head=p;
        else
          q->next=p;
        q=p;
        }
        //  这里转移不会 
        t=head;
        while(t != NULL)
        {
                   printf("%d ",t->data);
                t=t->next;
        }
}


求思路,大神帮帮忙

最佳答案

查看完整内容

其实可以在插入的时候就操作的 用两个指针 头top和尾rear 如果输入是负数 就改变头指针 如果是正数 就改变尾指针 例如 插入 2 -3 -2 4 -2 top rear都先初始化为null 然后第一次插入时 top=rear=p 后面的插入 如果是负数 就是p->next=top;top=p; 如果是正数 就是 rear->next= p; rear=p;这样子就可以了 如果是插入过程有要求是升序就加个判断就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-28 00:16:34 | 显示全部楼层
其实可以在插入的时候就操作的 用两个指针 头top和尾rear  如果输入是负数 就改变头指针 如果是正数 就改变尾指针 例如 插入 2 -3 -2 4 -2 top rear都先初始化为null 然后第一次插入时 top=rear=p  后面的插入 如果是负数 就是p->next=top;top=p; 如果是正数 就是 rear->next= p; rear=p;这样子就可以了  如果是插入过程有要求是升序就加个判断就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-12-28 12:28:50 | 显示全部楼层
谁帮忙解答吗?

输入 如 1 -2 -3 4 5 -6
输出      -2 3 -6 1 4 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-29 19:57:02 | 显示全部楼层
两个指针,一个用于遍历链表,一个用于记录排序后最后一个负数的位置,遍历的指针找到负数就把它排到记录的那个指针后面。大体的思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-12-30 22:40:40 | 显示全部楼层
jewen 发表于 2015-12-29 19:57
两个指针,一个用于遍历链表,一个用于记录排序后最后一个负数的位置,遍历的指针找到负数就把它排到记录的 ...

排序后,要是一排序,好像就会不对吧:cry
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-12-31 21:22:34 | 显示全部楼层
大神 求帮忙 @ryxcaixia  @小人@更多大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-2 21:37:11 | 显示全部楼层
你的输出没要求排序啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-4 23:28:27 | 显示全部楼层
jewen 发表于 2016-1-2 21:37
你的输出没要求排序啊

不是,你不是说   一个用于记录排序后最后一个负数的位置    这里的排序,要是一排序,不就乱了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-10 16:30:14 | 显示全部楼层
两个指针,一个用于遍历链表,一个用于记录排序后最后一个负数的位置,遍历的指针找到负数就把它排到记录的那个指针后面。大体的思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-10 16:49:44 | 显示全部楼层
一个用于记录排序后最后一个负数的位置    这里的排序 是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-10 16:50:16 | 显示全部楼层
zerco 发表于 2016-1-10 16:30
两个指针,一个用于遍历链表,一个用于记录排序后最后一个负数的位置,遍历的指针找到负数就把它排到记录的 ...

一个用于记录排序后最后一个负数的位置    这里的排序 是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-21 18:08:33 | 显示全部楼层
想看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-1 20:57:58 | 显示全部楼层
littlestar 发表于 2016-2-1 17:09
其实可以在插入的时候就操作的 用两个指针 头top和尾rear  如果输入是负数 就改变头指针 如果是正数 就改变 ...

O(∩_∩)O谢谢,懂了~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-16 23:20:41 | 显示全部楼层
如果是负数 就是p->next=top;top=p
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 01:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表