关于逆置输出链表数据的一些想法

    在学习链表的时候,基本就是创建,插入,删除这几种操作,掌握这几种操作之后,对于这种类型链表的学习,才可以说是基本掌握了,而在这几种基础上,我就来谈一谈单链表的逆置输出吧

    先来看一看教科书上的基本写法:用头插法实现单链表的逆置输出

Head *Inversion(Head *head)

{

    Head *p,*q;

    p = head->next;

    q = head->next->next;

    while(head->next != NULL){ //当q为空时结束循环

        p->next = p->next->next;//p指向需要逆置的下一个结点

        q->next = head->next;

        head->next = q;//插入完成

        q = p->next;//q指向下一个需要逆置的结点

    }

    while(head != NULL){//输出逆置过后的链表

        printf("%d",&(head->data));

        head = head->next;

    }

}

其实这种操作用递归的话,可能会更简单,更容易理解一些

void Inversion_2(Head *head)

{

    if(head->next != NULL)//当head->next 指向空时输出此时数据

        Inversion_2(head->next);

    printf("%d",head->data);

  }

  虽然这样比较简单,但是没有改变原链表,只是输出了逆置的数据,所以适用范围应该也不会很大?

        


猜你喜欢

转载自blog.csdn.net/wobushimotou/article/details/80317308