鱼C论坛

 找回密码
 立即注册
查看: 2665|回复: 10

[已解决]链表问题求解思路

[复制链接]
发表于 2017-3-15 17:26:12 | 显示全部楼层 |阅读模式

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

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

x
创建一个链表,有若干节点。
把第一个节点的值复制到第二个中,第二个节点的值复制到第三个中。直到最后的节点指针为NULL。
也就是把1,2,3,4 变成1,1,2,3
想了好久太笨了想不出来,求指点
最佳答案
2017-3-15 18:27:13
注意:程序有很多地方都没有检查,在要求比较高时,应该做一些适当的检查
^_^
  1. #include <stdio.h>
  2. #include <stdlib.h>

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

  8. List *CreateList(void)
  9. {
  10.         List *ret = (List *)malloc(sizeof(List));
  11.         ret->data = 0;
  12.         ret->next = NULL;

  13.         return ret;
  14. }

  15. void ListAddValue(List *L, int data)
  16. {
  17.         List *list = L;

  18.         while(list->next != NULL)
  19.         {
  20.                 list = list->next;
  21.         }

  22.         list->next = (List *)malloc(sizeof(List));
  23.         list->next->data = data;
  24.         list->next->next = NULL;
  25. }

  26. int ListGetValue(List *L, int n)
  27. {
  28.         List *list = L;

  29.         while(n--)
  30.         {
  31.                 if(list->next != NULL)
  32.                 {
  33.                         list = list->next;
  34.                 }
  35.                 else
  36.                 {
  37.                         return -1;
  38.                 }
  39.         }

  40.         return list->next->data; // 第一个结点不存储数据
  41. }

  42. int ListChangeValue(List *L, int n, int newValue)
  43. {
  44.         List *list = L;

  45.         while(n--)
  46.         {
  47.                 if(list->next != NULL)
  48.                 {
  49.                         list = list->next;
  50.                 }
  51.                 else
  52.                 {
  53.                         return -1;
  54.                 }
  55.         }

  56.         list->next->data = newValue;

  57.         return 0;
  58. }

  59. int main(void)
  60. {
  61.         List *list = CreateList();
  62.         int v;

  63.         for(int i = 1; i < 5; i++)
  64.         {
  65.                 ListAddValue(list, i);
  66.         }

  67.         // 先打印一下
  68.         for(int i = 1; i < 5; i++)
  69.         {
  70.                 printf("%d ", ListGetValue(list, i - 1));
  71.         }
  72.         putchar('\n');


  73.         for(int i = 3; i >= 1; i--)
  74.         {
  75.                 v = ListGetValue(list, i - 1);
  76.                 ListChangeValue(list, i, v);
  77.         }

  78.         // 再一次打印
  79.         for(int i = 1; i < 5; i++)
  80.         {
  81.                 printf("%d ", ListGetValue(list, i - 1));
  82.         }
  83.         putchar('\n');

  84.         return 0;
  85. }
复制代码

  1. 1 2 3 4
  2. 1 1 2 3
  3. 请按任意键继续. . .
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-15 03:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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