链表常见操作算法

来源:互联网 发布:打工软件哪个好 编辑:程序博客网 时间:2024/05/16 14:21

链表常见操作算法

1. 单链表的逆置

node *Reverse(node *Head){node *p1,*p2,*p3;if(head == NULL || head->next == NULL){return head;}p1 = head,p2 = p1->next;while(p2){p3 = p2->next;p2->next = p1;// 指针域反转p1 = p2;// 遍历调整p2 = p3;}head->next = NULL;head = p1;return head;}


2. 单链表排序
node *Sort(node *Head){node *p, *p2,*p3;int n = length(Head);// 得到链表长度int temp;if(head = NULL || head->next == NULL){return head;}p = head;for(int j = 1; j < n; ++ j){p = Head;for(int i = 0; i < n - j; ++ i){if( p->data > p->next->data ){temp      = p->data;p->data  = p->next->data;p->next->data = temp;}p = p->next;}}return head;}

3. 链表的插入(自动排序)

node *Insert_Sort(node *Head, int num){node *p0, *p1, *p2;p1 = Head;p0 = (node *)malloc( sizeof(node) );p0->data = num;while( (p0->data > p1->data) && (p1->next != NULL) ){p2 = p1;p1 = p1->next;}if( p0->data <= p1->data ){if(Head == p1)// 插在头结点之前{p0->next = p1;Head = p0;}else// 调整指域{p2->next = p0;p0->next = p1;}}else{p1->next = p0;p0->next = NULL;}return (Head);}

4. 链表结点删除

node *Delete_Node(node *Head, int num){node *p1,*p2;p1 = Head;while(num != p1->data && p1->next != NULL){p2 = p1;p1 = p1->next;}if(num == p1->data){if(Head == p1){Head = p1->next;free(p1);}elsep2->next = p1->next;}elseprintf("Can't find node->num!'");return Head;return (Head);}


0 0