新链接列表包含前一个

时间:2017-04-19 10:54:06

标签: c linked-list

我有表示整数的链表(每个节点都是整数的数字)。在我尝试打印它们之后制作第二个或第三个链表时,在第二个打印第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;
}

0 个答案:

没有答案