1、单链表排序:
单链表的排序中,只需要交换两个节点的值即可,不需要改变指向
<span style="font-family:SimSun;font-size:18px;">typedef struct student
{
int data;
struct student *next;
}node;
//head指向表头,head->next才是第一个节点
void sort(node *head)
{
node *p=head->next;
int len=length(head);
int temp;
while(p==NULL || p->next==NULL)
return;
for (int i=1;i<len;i++)
{
p=head->next;
for (int j=0;j<len-i;j++)
{
if (p->data>p->next->data)
{
//值的交换
temp=p->data;
p->data=p->next->data;
p->next->data=temp;
}
p=p->next;
}
}
}</span>
2、单链表逆置
设置辅助指针,用于记录先前遍历的结点
//head指向表头,head->next才是第一个节点
<span style="font-family:SimSun;font-size:18px;">void reverse(node *head)
{
node *p1,*p2,*p3;
p1=head->next;
if(p1==NULL || p1->next==NULL)
return;
p2=p1->next;
while(p2)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
head->next->next=NULL;
head->next=p1;
}</span>
还有一种逆置方法是使用递归,在对当前结点逆置时,先递归地逆置其后继结点,然后将后继结点指向当前结点。
详情见:http://blog.csdn.net/heyabo/article/details/7610732