我有表示整数的链表(每个节点都是整数的数字)。在我尝试打印它们之后制作第二个或第三个链表时,在第二个打印第2个和第1个,在第3个中,打印第3个,第2个和第1个等等。我缺少什么?欢迎任何帮助.... 我使用的每个节点的结构是:
typedef struct node {
int digit;
struct node *next;
} listnode_t;
例如,这是我的主要
主
listnode_t *number1 = create_list(2);//create list of two digits
listnode_t *number2 = create_list(2);//create list of two digits
listnode_t *number3 = int_to_list(1024);//create list for integer 1024
print_number(number1);
printf("\n");
print_number(number2);
printf("\n");
print_number(number3);
我的输出是
Give a digit: 1
Give a digit: 7
Give a digit: 9
Give a digit: 5
17
End of printing number
9517
End of printing number
10249517
End of printing nunmber
我使用的三种方法是: print_number(listnode_t * head) 将指针放在列表的头部并打印元素
void print_number(listnode_t *head){
listnode_t *anode = head;
if (anode == NULL){
printf("The list is empty\n");
}
else {
while(anode != NULL){
printf("%d",anode->digit);
anode = anode->next;
}
printf("\n");
printf("End of printing the number\n");
}
}
listnode_t * create_list(int numdigits)
listnode_t *create_list(int numdigits){
listnode_t *ptr2;
listnode_t *head2;
int i;
int num[numdigits];
for(i=0;i<numdigits;i++){
do{
printf("Give a digit: ");
scanf("%d",&num[i]);
} while (num[i]>9 || num[i]<0);
}
for(i=numdigits-1;i>=0;i--){
ptr2 = (listnode_t*)malloc(sizeof(listnode_t));
if (ptr2 == NULL){
printf("\n Node creation failed \n");
return NULL;
}
ptr2->digit = num[i];
ptr2->next = NULL;
ptr2->next = head2;
head2 = ptr2;
}
return ptr2;
}
和listnode_t * int_to_list(int num) 取整数并将其表示为从LSB到MSB的链接列表
listnode_t *int_to_list(int num) {
listnode_t *ptr1;
listnode_t *head1;
int numOfdigits = countdigits(num);//counts the number of digits of integer
//num
int k = numOfdigits;
int digits[numOfdigits];
while (numOfdigits--) {
digits[numOfdigits]=num%10;
num/=10;
}
int i;
for(i=k-1;i>=0;i--){
ptr1 = (listnode_t*)malloc(sizeof(listnode_t));
if (ptr1 == NULL){
printf("\n Node creation failed \n");
return NULL;
}
ptr1->digit = digits[i];
ptr1->next = NULL;
ptr1->next = head1;
head1 = ptr1;
}
return ptr1;
}