【发布时间】:2016-04-07 16:52:02
【问题描述】:
使用类型定义:
typedef struct Node *List;
typedef struct Node {
int item;
List next;
} Node;
我找到的递归解决方案:
List arrayToList(int arr[],int n,int idx) {
if (n==idx) return NULL;
List list=malloc(sizeof(Node));
list->next=arrayToList(arr,n,idx+1);
list->item=arr[idx];
return list;
}
更新:以下几乎是正确的,但我不知道为什么最后会打印一个零。
List newNode() {
List li=malloc(sizeof(Node));
return li;
}
List arrayToList(int arr[],int n) {
List li=newNode();
List li1=li; /*save the beginning of the list*/
int i;
for (i=0;i<n;i++) {
li->item=arr[i];
li->next=newNode();
li=li->next;
}
li=NULL;
return li1;
}
void printList(List li) {
while (li!=NULL) {
li=li->next;
}
printf("\n");
}
int main(int argc, char* argv[]) {
int arr[]={4,1,2,3,4,7,4,5,6,8};
List li=arrayToList(arr,10);
printList(li);
return 0;
}
我得到的输出是: 4 1 2 3 4 7 4 5 6 8 0 。
更新 2:将函数 printList 更改为这个可以给我正确的输出:
void printList(List li) {
while (li->next!=NULL) {
printf("%d ",li->item);
li=li->next;
}
printf("\n");
}
但我想知道为什么我应该有li->next!=NULL 作为守卫?
【问题讨论】:
-
“我想知道”。分享你的想法。
-
你应该有
li->next != NULL,因为你列表中的最后一个元素将指向null。
标签: c linked-list iteration