有头单链表的创建 ,及有头单链表逆转

来源:互联网 发布:资源商城源码 编辑:程序博客网 时间:2024/06/08 05:15

有头头插单链表:

#include <stdio.h>#include <stdlib.h>typedef struct person{    int age;    struct person *next;}per;per *head_list(per *one, int num){    per *temp = (per *)malloc(sizeof(per));    temp->age = num;    per *head = one->next;        one->next = temp;    temp->next = head;    return head;}void show(per *head){    if(NULL == head->next)    {        return;    }    while(head->next)    {        printf("age is %d\n",head->next->age);        head = head->next;    }}int main(){    per head;    head.next = NULL;    head_list(&head,10);    head_list(&head,20);    head_list(&head,30);    head_list(&head,40);    head_list(&head,50);    show(&head);    return 0;}
有头尾插单链表:

#include <stdio.h>#include <stdlib.h>typedef struct person{    int age;    struct person *next;}per;per *tail_list(per *one, int num){    per *temp = (per *)malloc(sizeof(per));    temp->age = num;    per *head = one->next;    while(one->next)    {        one = one->next;    }    one->next = temp;    return head;}void show(per *head){    if(NULL == head)    {        return;    }    while(head->next)    {        printf("age is %d\n",head->next->age);        head = head->next;    }}int main(){    per head;    head.next = NULL;    tail_list(&head,10);    tail_list(&head,20);    tail_list(&head,30);    tail_list(&head,40);    tail_list(&head,50);    show(&head);        return 0;}

有头头插单链表逆转:

#include <stdio.h>#include <stdlib.h>typedef struct person{    int age;    struct person *next;}per;per *head_list(per *one, int num){    per *temp = (per *)malloc(sizeof(per));    temp->age = num;    per *head = one->next;    one->next = temp;    temp->next = head;    return temp;}per *reverse(per *head){    if(NULL == head->next)    {        return NULL;    }    per *p, *q, *r;    p = head->next;    q = p->next;    r = q->next;    head->next->next = NULL;    while(r)    {        q->next = p;        p = q;        q = r;        r = r->next;    }    q->next = p;    head->next = q;    return head;}void show(per *head){    if(NULL == head->next)    {        return;    }    while(head->next)    {        printf("aeg is %d\n",head->next->age);        head = head->next;    }}int main(){    per head;    head.next = NULL;    head_list(&head,10);    head_list(&head,20);    head_list(&head,30);    head_list(&head,40);    head_list(&head,50);    show(&head);    printf("===============\n");    reverse(&head);    show(&head);    return 0;}

有头尾插单链表逆转:

#include <stdio.h>#include <stdlib.h>typedef struct person{    int age;    struct person *next;}per;per *tail_list(per *one, int num){    per *temp = (per *)malloc(sizeof(per));    temp->age = num;    per *head = one->next;    while(one->next)    {        one = one->next;    }    one->next = temp;    return head;}per *reverse(per *head){    if(NULL == head->next)    {        return;    }    per *p, *q, *r;    p = head->next;    q = p->next;    r = q->next;    head->next->next = NULL;    while(r)    {        q->next = p;        p = q;        q = r;        r = r->next;    }    q->next = p;    head->next = q;    return head;}void show(per *head){    if(NULL == head->next)    {        return;    }    while(head->next)    {        printf("age is %d\n",head->next->age);        head = head->next;    }}int main(){    per head;    head.next = NULL;    tail_list(&head,10);    tail_list(&head,20);    tail_list(&head,30);    tail_list(&head,40);    tail_list(&head,50);    show(&head);    printf("=====================\n");    reverse(&head);    show(&head);    return 0;}




原创粉丝点击