#include <stdio.h>
#include<stdlib.h>
typedef struct node {
int data;
int help;
struct node* next;
} Node;
void print_list(Node* head);
void CreateList(Node** head , int data);
void reverse(Node** head_ref);
int main() {
int i, c, a;
Node* list = NULL;
printf("How many numbers do you want? ");
scanf("%d",&c);
for (i = 1; i <= c; i++) {
printf("Enter number %d: ", i);
scanf("%d", &a);
CreateList(&list, a);
}
printf("Given linked listn");
print_list(list);
reverse(&list);
printf("nReversed Linked list n");
print_list(list);
return 0;
}
void print_list(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
if (head == NULL)
printf("NULL");
return;
}
void CreateList(Node** head , int data) {
Node *temp = (Node*) malloc(sizeof(Node));;
temp->data = data;
temp->next = *head;
*head = temp;
}
void reverse(Node** head_ref) {
Node* prev = NULL;
Node* current = *head_ref;
Node* next;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
*head_ref = prev;
}
输入 : 1 2 3 4 5 6
给定链表:6->5->4->3->2->1->NULL
反向链表 : 1
->2->3->4->5->6->NULL
我的想法是这样的:
1->2->3->4->5->6->空 - 成为给定列表
6->5->4->3->2->1->空 - 成为反向列表
我实际上非常努力,但找不到以正常方式创建列表的方法,有什么可能的解决方案吗?
你的 create_list(( 函数在链的开头插入新节点,向下推现有的其他节点。相反,您可以在链的末尾附加,例如:
void add_at_end(Node** head ,int data)
{
Node *temp;
// Find the end of the chain
while (*head) { head = & (*head)->next ; }
temp = malloc(sizeof *temp);
temp->next = NULL;
temp->data = data;
// append
*head = temp;
}