【链表】链表的逆置

sub:”输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据。 

Sample Input:12 56 4 6 55 15 33 62 -1

Sample Output:62 33 15 55 6 4 56 12 

#include <stdio.h>
#include <stdlib.h>
struct node
{
    int data;
    struct node *next;
};
struct node *creat()
{
    struct node *p,*head,*tail;
    int x;
    head=(struct node*)malloc(sizeof(struct node));
    tail=head;
    while(scanf("%d",&x)!=EOF&&x!=-1)
    {
        p=(struct node*)malloc(sizeof(struct node));
        p->data=x;
        p->next=NULL;
        tail->next=p;
        tail=p;
    }
    return head;
}
struct node *re(struct node *head)
{
    struct node *p,*q;//q为将要转置链的后指针(紧跟p)
    p=head->next;
    q=p->next;
    head->next=NULL;
    while(p)
    {
        p->next=head->next;
        head->next=p;
        p=q;
        if(q)
            q=q->next;
    }
return head;
}
int main()
{
    struct node *head,*p;
    head=creat();
    head=re(head);
    p=head->next;
    while(p)
    {
        printf("%d",p->data);
        if(p->next)printf(" ");
        else printf("\n");
        p=p->next;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/flyf000/article/details/82940935