鱼C论坛

 找回密码
 立即注册
查看: 3766|回复: 4

[已解决]链表输出

[复制链接]
发表于 2021-8-13 16:57:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 焦糖橙子 于 2021-8-13 18:09 编辑

目标:输出一个n*n的方阵,每一行,每一列的元素都不重复
例如3*3的方阵
1  2  3
2  3  1
3  1  2
输出的结果错了
想问一下45行的代码不能实现下次循环从链表的第二个数开始输出吗?

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. typedef struct Node
  4. {
  5.     int data;
  6.     struct Node*next;
  7. }node,*pnode;

  8. pnode Create(int n);

  9. pnode Create(int n)//创建一个1~n的循环链表,存储1~n的数据
  10. {
  11.     pnode head=(pnode)malloc(sizeof(node));
  12.     pnode link=head;

  13.     head->next=link;
  14.     for(int i=0;i<n;i++)
  15.     {
  16.         link->next=(pnode)malloc(sizeof(node));
  17.         link->data=i+1;
  18.         link=link->next;
  19.     }

  20.     link->next=head;//尾巴的next指向头结点位置

  21.     return head;
  22. }

  23. int main(void)
  24. {
  25.     int n;
  26.     pnode list;
  27.     printf("请输入一个n*n方阵:");
  28.     scanf("%d",&n);

  29.     list=Create(n);
  30.     for(int i=0;i<n;i++)
  31.     {
  32.         for(int j=0;j<n;j++)
  33.         {
  34.             printf("%4d",list->data);
  35.             list=list->next;
  36.         }
  37.         list=list->next;//第二次从2开始输出,第三次从3输出,以此类推
  38.         putchar('\n');
  39.     }

  40.     return 0;
  41. }
复制代码
最佳答案
2021-8-13 20:20:50
for(int i=0;i<n;i++)
    {
        link->next=(pnode)malloc(sizeof(node));
        link->data=i+1;
        link=link->next;
    }

    link->next=head;//尾巴的next指向头结点位置
这段代码 构成的循环链表 有一个没有初始值的节点   如果输入n为4   你构成的循环列表是  1->2->3->4->未初始节点->头部1    本来四个节点的循环链表你里面有了五个节点
这是我改的一种  可以参考
for (int i = 0; i<n; i++)
        {
                link->next = (pnode)malloc(sizeof(node));
                link->next->data = i + 1;
                link = link->next;
        }

        link->next = head->next;//尾巴的next指向头结点位置
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-13 18:07:18 | 显示全部楼层
本帖最后由 焦糖橙子 于 2021-8-13 18:09 编辑

用了一个别的办法,不过输出变成了奇怪的数字。。。。
只有for循环变了点,如果能按照原来的思路改就最好。
不行的话帮我看看新的这个有什么问题

  1. int main(void)
  2. {
  3.     int n;
  4.     pnode list;
  5.     pnode head;
  6.     printf("请输入一个n*n方阵:");
  7.     scanf("%d",&n);

  8.     head=Create(n);
  9.     list=head;
  10.     for(int i=0;i<n;i++)
  11.     {
  12.         for(int j=0;j<n;j++)
  13.         {
  14.             printf("%4d",list->data);
  15.             list=list->next;
  16.         }
  17.         head=head->next;//保证每次从下一个结点开始循环
  18.         list=head;
  19.         putchar('\n');
  20.     }

  21.     return 0;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 20:20:50 | 显示全部楼层    本楼为最佳答案   
for(int i=0;i<n;i++)
    {
        link->next=(pnode)malloc(sizeof(node));
        link->data=i+1;
        link=link->next;
    }

    link->next=head;//尾巴的next指向头结点位置
这段代码 构成的循环链表 有一个没有初始值的节点   如果输入n为4   你构成的循环列表是  1->2->3->4->未初始节点->头部1    本来四个节点的循环链表你里面有了五个节点
这是我改的一种  可以参考
for (int i = 0; i<n; i++)
        {
                link->next = (pnode)malloc(sizeof(node));
                link->next->data = i + 1;
                link = link->next;
        }

        link->next = head->next;//尾巴的next指向头结点位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-14 08:40:10 | 显示全部楼层
lei1996 发表于 2021-8-13 20:20
for(int i=0;inext=(pnode)malloc(sizeof(node));
        link->data=i+1;
        link=link->next;

我改好了,你的那个我跑出来还是多了一个节点,数值也是最后一个没有赋上
不过我知道你的意思了,我手动给最后一个赋值就行了
改成这样就ok
  1. pnode Create(int n)
  2. {
  3.     pnode head=(pnode)malloc(sizeof(node));
  4.     pnode link=head;

  5.     head->next=link;
  6.     for(int i=0;i<n-1;i++)
  7.     {
  8.         link->next=(pnode)malloc(sizeof(node));
  9.         link->data=i+1;
  10.         link=link->next;
  11.     }
  12.     link->data=n;
  13.     link->next=head;

  14.     return head;
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-14 09:04:28 | 显示全部楼层
对了少复制了一行  就是
return head->next;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 15:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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