這個程序是爲了在鏈表中插入一個元素,但是我忽略了那些沒有問題的函數。在鏈表中添加一個元素到C程序中
起初,我寫了它與全球分配HEAD和CURRENT元素爲NULL,它工作正常。使用main()
中的局部賦值變量不起作用。具體來說,main
中的while
迴路因故障insertDataToEnd
函數而無限大。我怎麼修復它?另外,在我寫insertDataToEnd
的方法不同,並且它只打印列表的第一個和最後一個元素之前,問題可能與printList
有關嗎?
編輯(再次):仍然有一些問題處理結構上的所有新信息。現在我有了這個sortList函數來交換元素,所以它們將以傾斜順序排列。只有在使用該功能時纔會出現錯誤。
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
}node_t;
void insertDataToEnd(int value, struct node **head){
struct node *link = (struct node*) malloc(sizeof(node_t));
link -> data = value;
link -> next = NULL;
node_t *current = *head;
if(*head == NULL){
*head = link;
}
else{
while(current -> next != NULL){
current = current -> next;
}
current -> next = link;
}
}
void printList(struct node* head){
node_t *current = head;
while(current != NULL){
printf("%d -> ", current -> data);
current = current -> next;
}
printf("NULL\n");
}
void sortList(int count, struct node* head){
int i, j, temp;
count += 1;
struct node *current;
struct node *next;
for(i = 0; i < count; i++){
current = head;
next = current -> next;
for(j = 1; j < count + 1; j++){
if(current -> data > next -> data){
temp = current -> data;
current -> data = next -> data;
next -> data = temp;
}
current = current->next;
next = next->next;
}
}
}
void insertElement(int value, int k, struct node** head){
node_t *elemk = (struct node*) malloc (sizeof(node_t));
node_t *elem = (struct node*) malloc (sizeof(node_t));
elemk = *head;
int i = 2;
while (i < k && elemk != NULL){
elemk = elemk -> next;
i++;
}
if(i == k){
printf("element inserted.\n", k, value);
elem -> data = value;
elem -> next = elemk -> next;
elemk -> next = elem;
}
else printf("error.\n");
}
int main()
{
struct node *head = NULL;
int value, readValue, k;
int i = 0;
printf("enter data.\n");
while(1){
scanf("%d", &value);
insertDataToEnd(value, &head);
i++;
if (i == 4) break;
}
sortList(i, head);
printf("insert element\n");
scanf("%d %d", &readValue, &k);
insertElement(readValue, k, &head);
printList(head);
return 0;
}
你是意識到調用insertDataToEnd(value,current);'不會修改'current'?順便說一下'sortList'是什麼? –
提示:在'insertDataToEnd'中需要'**',類似於'insertFirstElement'中的操作。 'printList'函數看起來不錯。 –
另一個提示:你不需要'insertFirstElement'和'insertDataToEnd'函數。你可以編寫_one single_函數來處理'head'爲NULL的情況。這也會簡化'main'功能。 –