鱼C论坛

 找回密码
 立即注册
查看: 4030|回复: 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

如何转移 这部分想不出来,只会创建这部分

  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. struct node
  4. {
  5.         int data;
  6.         struct node *next;
  7. };
  8. int main()
  9. {
  10.         struct node *head,*p,*q,*t;
  11.         int i,j,k;
  12.         char str[50];
  13.         head=NULL;
  14.         scanf("%d",&j);
  15.         while(j--)
  16.         {
  17.                 p=(struct node*)malloc(sizeof(struct node));
  18.                 scanf("%d",&i);
  19.                 p->data=i;
  20.                 p->next=NULL;
  21.                 if(head == NULL)
  22.                   head=p;
  23.         else
  24.           q->next=p;
  25.         q=p;
  26.         }
  27.         //  这里转移不会
  28.         t=head;
  29.         while(t != NULL)
  30.         {
  31.                    printf("%d ",t->data);
  32.                 t=t->next;
  33.         }
  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 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-3-29 06:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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