|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
创建一个链表,有若干节点。
把第一个节点的值复制到第二个中,第二个节点的值复制到第三个中。直到最后的节点指针为NULL。
也就是把1,2,3,4 变成1,1,2,3
想了好久太笨了想不出来,求指点
注意:程序有很多地方都没有检查,在要求比较高时,应该做一些适当的检查
^_^
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct node
- {
- int data;
- struct node *next;
- } List;
- List *CreateList(void)
- {
- List *ret = (List *)malloc(sizeof(List));
- ret->data = 0;
- ret->next = NULL;
- return ret;
- }
- void ListAddValue(List *L, int data)
- {
- List *list = L;
- while(list->next != NULL)
- {
- list = list->next;
- }
- list->next = (List *)malloc(sizeof(List));
- list->next->data = data;
- list->next->next = NULL;
- }
- int ListGetValue(List *L, int n)
- {
- List *list = L;
- while(n--)
- {
- if(list->next != NULL)
- {
- list = list->next;
- }
- else
- {
- return -1;
- }
- }
- return list->next->data; // 第一个结点不存储数据
- }
- int ListChangeValue(List *L, int n, int newValue)
- {
- List *list = L;
- while(n--)
- {
- if(list->next != NULL)
- {
- list = list->next;
- }
- else
- {
- return -1;
- }
- }
- list->next->data = newValue;
- return 0;
- }
- int main(void)
- {
- List *list = CreateList();
- int v;
- for(int i = 1; i < 5; i++)
- {
- ListAddValue(list, i);
- }
- // 先打印一下
- for(int i = 1; i < 5; i++)
- {
- printf("%d ", ListGetValue(list, i - 1));
- }
- putchar('\n');
- for(int i = 3; i >= 1; i--)
- {
- v = ListGetValue(list, i - 1);
- ListChangeValue(list, i, v);
- }
- // 再一次打印
- for(int i = 1; i < 5; i++)
- {
- printf("%d ", ListGetValue(list, i - 1));
- }
- putchar('\n');
- return 0;
- }
复制代码
- 1 2 3 4
- 1 1 2 3
- 请按任意键继续. . .
复制代码
|
|