C语言-链表指针有关问题
C语言-链表指针问题
有道练习题是:编写一个函数,把给定链表中的最小数据项移到该表中的第一个节点。
编译上面的代码,运行./list 3
结果输出为
1.
99 41 70
41 70
2.
54 83 26
26
之后我调试程序,发现运行findMin函数的时候,运行
这段代码的时候,链表的头指针的t->next会发生变化,但好像我没有更改到t->next。
求解!!
------解决方案--------------------
首先这个用法就错了
struct node head;
int i;
link t,a = &head;
a指的空间在栈去,函数返回就没了。
有道练习题是:编写一个函数,把给定链表中的最小数据项移到该表中的第一个节点。
//list.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "list.h"
link initList(int N)
{
struct node head;
int i;
link t,a = &head;
srand(time(NULL));
for(i = 0,t = a;i < N;i++)
{
t->next = malloc(sizeof *t);
t = t->next;
t->next = NULL;
t->item = rand()%100;
}
return a;
}
void printList(link t)
{
t = t->next;
while(t != NULL)
{
printf("%d ",t->item);
t = t->next;
}
printf("\n");
}
void findMin(link t)
{
link u,pre,min;
u = t->next;
pre = t;
min = u;
while(u->next != NULL)
{
if(u->next->item < min->item)
{
min = u->next;
}
u = u->next;
}
if(min != t->next)
{
pre->next = min->next;
min->next = t->next;
t->next = min;
}
}
//list.h
typedef struct node* link;
struct node{
int item;
link next;
};
link initList(int);
void printList(link);
void findMin(link);
#include <stdio.h>
#include "list.h"
main(int argc,char *argv[])
{
int i,N = atoi(argv[1]);
link t,x,head;
head = initList(N);
printList(head);
findMin(head);
printList(head);
}
编译上面的代码,运行./list 3
结果输出为
1.
99 41 70
41 70
2.
54 83 26
26
之后我调试程序,发现运行findMin函数的时候,运行
while(u->next != NULL)
{
if(u->next->item < min->item)
{
min = u->next;
}
u = u->next;
}
这段代码的时候,链表的头指针的t->next会发生变化,但好像我没有更改到t->next。
求解!!
C
链表
指针
------解决方案--------------------
首先这个用法就错了
struct node head;
int i;
link t,a = &head;
a指的空间在栈去,函数返回就没了。