您的位置:首页 > 职场人生

链表面试题之常规题1 -- 反转链表

2010-07-18 19:18 232 查看
原帖:/article/5291636.html

反转链表其实在前面的系列中已经写过程序了,现在只是将其单独提出来,列在这里。

主要就是使用额外的指针来标识新链表的头,现在正在处理的链表,以及链表的next节点。

题目:将链表按照逆序排列

可以使用非递归,也就是循环遍历的方法

1 linknode *reverse(linknode* head)
2 {
3     linknode *newlist=NULL;
4     linknode *curr=head;
5     while(curr)
6     {
7         //定义一个指向当前节点下一个节点的指针
8         linknode *next=curr->next;
9         //将当前节点的next指针进行反转
10         curr->next=newlist;
11         //将新的反转后的链表的头节点移动到当前节点
12         newlist=curr;
13         //移动到下一个节点,准备处理
14         curr=next;
15     }
16     return newlist;
17 }
18


利用参数,少用一个节点的空间

1 linknode *reverse(linknode *head)
2 {
3     linknode *newlist=NULL;
4     linknode *curr=head;
5     while(curr)
6     {
7         head=curr->next;
8         curr->next=newlist;
9         newlist=curr;
10         curr=head;
11     }
12     return newlist;
13 }


使用递归来实现反转链表

1 linknode* reverse(linknode *oldlist, linknode *newlist)
2 {
3     if(oldlist==NULL)
4         return newlist;
5     linknode *next=oldlist->next;
6     oldlist->next=newlist;
7     reverse(next,oldlist);
8 }
9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: