单链表冒泡排序

今天做链表排序有个误区,就是以为交换的时候要连next节点也交换,还要固定head节点,想了很久也没做出来,但是后来看网上的提示,才知道只要交换节点内的数据就可以了,根本不用交换next节点

 

 

#include <stdio.h>
#include <stdlib.h>

struct node
{
	int data;
	struct node *next;
};

struct node *create_list(int a[],int len)
{
	struct node *phead;
	struct node *ptr;
	struct node *pre;
	phead=(struct node *)malloc(sizeof(struct node));
	int i=0;
	phead->data=a[i];
	phead->next=NULL;
	ptr=phead->next;
	pre=phead;
	for(i=1;i<len;i++)
	{
		ptr=(struct node *)malloc(sizeof(struct node));
		ptr->data=a[i];
		ptr->next=NULL;
		pre->next=ptr;
		ptr=ptr->next;
		pre=pre->next;
	}
	
	return phead;
}

void print_list(struct node *phead)
{
	struct node *ptr=phead;
	
	while(ptr != NULL)
	{
		printf("%d ",ptr->data);
		ptr=ptr->next;
	}
	
	printf("\n");
}

struct node *bubble(struct node *phead,int len)
{
	struct node *ptr,*next;
	int temp;
	
	for(int i=0;i<len;i++)
	{
		ptr=phead;
		next=ptr->next;
		for(int j=len-i-1;j>0;j--)
		{
			if(ptr->data > next->data)
			{
				temp=ptr->data;
				ptr->data=next->data;
				next->data=temp;
			}
			ptr=ptr->next;
			next=next->next;
		}
	}
	
	return phead;
}

int main()
{
	int a[10]={
		5,3,6,8,9,6,5,4,2,7
	};
	
	struct node *phead;
	phead=create_list(a,10);	

	print_list(phead);
	
	phead=bubble(phead,10);
	
	print_list(phead);
}

 

posted @ 2010-12-07 13:55  linyilong  阅读(2970)  评论(0编辑  收藏  举报