单链表倒置(顺序与递归)
发布时间:2020-05-22 16:17:09 所属栏目:程序设计 来源:互联网
导读:单链表倒置,给你一个头指针,用递归与非递归的方法分别实现; 分析见代码; 代码如下: // [9/30/2013 qingezha] 链表倒置 循环与递归形式//一般形式,1—2-3-4 现在1-2-3-4 那么改变1的next的时候需要保存指向2的指针,然后同理处理2//需要保存的,用直译(
|
单链表倒置,给你一个头指针,用递归与非递归的方法分别实现; 分析见代码; 代码如下: // [9/30/2013 qingezha] 链表倒置 循环与递归形式
// 一般形式,1—>2->3->4 现在1<-2<-3<-4 那么改变1的next的时候需要保存指向2的指针,然后同理处理2
// 需要保存的,用直译(见词知意)的表达出来比如:pre前面,next后面,cur当前,然后循环后赋新值
LinkPtrs reverse_link(LinkPtrs root) //头指针指向的是第一个元素
{
if(root == NULL)
return NULL;
LinkPtrs nextp = root->next; //第一个结点
LinkPtrs pre = root; //保留前端
LinkPtrs temp = NULL;
LinkPtrs reverseHead = NULL;
pre -> next = NULL;
while(nextp->next)
{
temp = nextp -> next; //先要保存下一个指针
nextp -> next = pre;
pre = nextp;
nextp = temp;
}
nextp -> next = pre;
reverseHead = nextp;
return reverseHead;
}
//链表倒置,切记 方法很巧!!!!!!!!!!!!!!!!!!
LinkPtrs reverse_link_recursive(LinkPtrs root)
{
if(root == NULL)
return NULL;
LinkPtrs cur,temp,revers_head;
if(root->next == NULL)
return root; //链表如果只有一个结点,那么直接返回第一个
else
{
cur = root;
temp = cur -> next; //temp 为2->3->4的头指针
//可以认为后面的都已经倒过来了,且认为revers_head 为倒过来的链表的头指针
//这样理解就容易多了
revers_head = reverse_link_recursive(temp);
temp -> next = cur;
cur -> next = NULL;
}
return revers_head;
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
