c 链表交换节点的排序

#include <stdio.h>

typedef struct listnode 
{
    int f;
    struct listnode *next;
} ListNode;

ListNode *sort(ListNode *head)
{
    ListNode *p,*p1,*p2,*p3;
    ListNode h, t;
    if (head == NULL) return NULL;
    h.next=head;
    p=&h;
    while (p->next!=NULL)
    {
        p=p->next;
    }
    p=p->next=&t;
    while (p!=h.next)
    {
        p3=&h;
        p1=p3->next;
        p2=p1->next;
        while (p2!=p) 
        {
            if ((p1->f)>(p2->f))
            {
                p1->next=p2->next;
                p2->next=p1;
                p3->next=p2;

                p3=p2; 
                p2=p1->next;

            } else {
                p3=p1;
                p1=p2;
                p2=p2->next;
            }
        }
        p=p1;
    }
    while (p->next!=&t)
    {
        p=p->next;
    }
    p->next=NULL;
    return h.next;
}

int main() {
    ListNode h,j,k,l;
    h.next=&j;
    h.f=3;
    j.next=&k;
    j.f=5;
    k.next=&l;
    k.f=1;
    l.next=NULL;
    l.f=7;
    ListNode* p = sort(&h);
    while (p != NULL) {
        printf("%d ", p->f);
        p=p->next;
    }
    printf("\n");
    return 0;
}

  

void sort1(ListNode *head)
{
	ListNode *p, *q, *pt;
	p = head;
	q = p->next;

	while(p->next != NULL)
	{
		while(q->next != NULL)
		{
			if (p->next->f > q->next->f)
			{
				pt = p->next;
				p->next = q->next;
				q->next = p->next->next;

				p->next->next = pt;
			}
			else
				q = q->next;
		}
		p = p->next;
		q = p->next;
	}
}

  

posted on 2015-06-26 10:22  嘘寒问暖  阅读(691)  评论(0编辑  收藏  举报

导航