借助栈将一个带头节点的单链表倒置

分析:

先理解倒置: 倒置前:1->2->3倒置后:3->2->1

思路:先沿着链表从头到尾扫一遍 将链表的每个结点的data的值依次入栈; 在沿着链表扫一遍 将栈中的元素一次出栈 并填入到每个结点的data中.

算法如下:

void reverse_list(LinkedListTP * head)

{

LStackTP ls,p;

DataTpye x;

InisStack(&ls); /*初始化链栈*/

p= head->next; /*将链栈p的指针指向头结点指向的结点*/

while(p!=null){

Push(&ls,p->data); /*将链表的data依次入栈到ls*/

p=p->next;

}

p= head->next; /*将p重新指到链表头结点所指向的结点*/

while(!EmptyStack(&ls)){

Pop(&ls,&x);

p->data=x; /*替换链表的数据?*/

p=p->next;

}

}

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...