单链表冒泡排序(交换节点)
代码如下:
#include<iostream> #include<cstdlib> using namespace std; int num; typedef struct list { int data; struct list *next; }Lnode,*linklist; linklist Createlist(int n)//构建带头结点的链表 { linklist p, head,tail; head = (linklist)malloc(sizeof(Lnode)); tail = NULL; head->next = tail; for (int i = 0; i < n; i++) { p = (linklist)malloc(sizeof(Lnode)); cin >>p-> data; p->next = NULL; if (tail == NULL) head->next = p; else tail->next = p; tail=p; } return head;//返回头结点的地址 } void sortlist(linklist head)//对链表进行bubble sort { linklist pre, p,tail; tail = NULL; while (head->next != tail) { pre = head; p = head->next; while (p->next!=tail) { if (p->data > p->next->data) { pre->next = p->next; p->next = pre->next->next; pre->next->next = p; } else p = p->next; pre = pre->next; } tail = p; } } int main() { cin >> num; linklist head,x; head = Createlist(num); sortlist(head); x = head->next; while (x != NULL) { cout << x->data; x = x->next; } cout << endl; return 0; }