单链表的逆置方法这里介绍两种(头插法和原地逆置法)
- 头插法
通过两个指针的移动,以原表的头指针为中间量,让原表的元素依次连接在逆置表的表头
typedef struct node
{
int data;
struct node *next;
}Node;
Node *converse(Node*head)
{
Node *p,*q;
p=head->next;//p指向原表第一个数据元素
head->next=NULL;//逆置表初始为空
while(p)//p指到原表尾的next跳出
{
/*移动*/
q=p;
p=p->next;
/*插入*/
q->next=head->next;//通过中间量(逆置表的表头)连接
head->next=q;//head始终指向p的前一个元素(用q存储)
return head;
}
}
*输出时应注意此时逆置表是一个有表头结点的单链表
- 原地逆置法
利用函数的递归调用找到尾结点,然后通过回溯
逆序。
Node *converse (Node* head)
{
Node*base;
if(head->next==NULL)
return head;
/*递归*/
base=coverse(head->next);
//递归结束后head为尾结点的前驱
/*回溯*/
head->next->next=head
head->next=NULL;
return base;//逆置表的表头
此时逆置表为无表头结点的单链表
若有不妥之处,恳请指正。
2878

被折叠的 条评论
为什么被折叠?



