[英]What should I do so that the last node in the linked list participates in bubble sort?
我已經寫了一個鏈表程序,我應該編寫一個冒泡排序功能,但是最后一個節點似乎不參與冒泡排序。 我猜這是因為指針移到NULL並拒絕了最后一個節點數據。 您能否建議我以其他任何方式對鏈表進行排序的方式,這也將有所幫助。
我的代碼是:
#include<stdio.h>
#include<stdlib.h>
typedef struct node_type{
int data;
struct node_type *next;
}node;
typedef node *list;
list head;
void traverse()
{
list temp;
temp=head;
printf("\nThe Data is: \n");
while(temp!=NULL)
{
printf("%d\n",temp->data);
temp=temp->next;
}
printf("\n\n");
}
void sort_list()
{
list new,ptr;
int temp;
for(new=head;new->next!=NULL;new=new->next)
{
for(ptr=new->next;ptr->next!=NULL;ptr=ptr->next)
{
if(new->data > ptr->data)
{
temp=new->data;
new->data=ptr->data;
ptr->data=temp;
}
}
}
traverse();
}
void main()
{
list temp,new;
head=NULL;
int n;
char ch;
temp=(list) malloc(sizeof(node));
printf("\nGive data: ");
scanf("%d",&temp->data);
head=temp;
printf("\n");
printf("Enter more data(y/n): ");
scanf("\n%c",&ch);
while(ch=='y')
{
new=(list) malloc(sizeof(node));
printf("Give data: ");
scanf("%d",&new->data);
temp->next=new;
temp=new;
printf("\nEnter more data(y/n): ");
scanf("\n%c",&ch);
}
temp->next=NULL;
traverse(head);
printf("\n\nDo you want to sort the Link-List(y/n): ");
scanf("\n%c",&ch);
if(ch=='y')
{
sort_list();
}
}
輸入:2 3 1 5 4
輸出:1 2 3 5 4
由於for
循環中的條件ptr->next!=NULL
, sort_list()
的內部循環在排序過程中未考慮最后一個節點。 您應該使用NULL
檢查它ptr
:
for(ptr = new->next; ptr != NULL; ptr = ptr->next)
^^^^
有幾件事需要修復。
int
not void
的返回值。 traverse
調用,該traverse
將head
作為參數傳遞,這將產生錯誤。 將traverse
函數更新為list
參數以外的任何一種,或者修復這些調用。 當ptr == NULL
時sort_list
函數的內部for循環條件應結束
for(ptr=new->next; ptr != NULL; ptr=ptr->next)
該函數可能更具防御性,如果head
恰好是NULL
,則當評估new->next != NULL
時,第一個for循環將導致分段錯誤。 您可以在函數的開頭使用if語句來防止這種情況。
malloc
,請確保釋放了內存。 您將需要遍歷列表並釋放每個節點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.