首页 > 试题广场 >

写代码,反转一个单链表,分别以迭代和递归的形式来实现。

[问答题]
写代码,反转一个单链表,分别以迭代和递归的形式来实现

1.typedef struct node LinkNode;
2.struct node
3.{
4.    int data;
5.    LinkNode*next;
6.};
//返回新链表头节点
LinkNode*reverse_link(LinkNode*head)
LinkNode*reverse_link_recursive(LinkNode*head)

1.//返回新链表头节点
2. LinkNode*reverse_link(LinkNode*head)
3.{
4.    if(head==NULL)
5.      return NULL;
6.    LinkNode*prev,*curr,*reverse_head,*temp;
7.    prev=NULL,curr=head;
8.    while(curr->next)
9.    {
10.      temp=curr->next;
11.      curr->next=prev;
12.      prev=curr;
13.      curr=temp;
14.    }
15.    curr->next=prev;
16.    reverse_head=curr;
17.    return reverse_head;
18.}
19.
20. LinkNode*reverse_link_recursive(LinkNode*head)
21.{
22.    if(head==NULL)
23.      return NULL;
24.    LinkNode*cur,*reverse_head,*temp;
25.    if(head->next==NULL)    //链表中只有一个节点,逆转后的头指针不变
26.      return head;
27.    else
28.    {
29.      curr=head;
30.      temp=head->next;    //temp为(a2,…an)的头指针
31.      reverse_head=reverse_link_recursive(temp);    //逆转链表(a2,…an),并返回逆转后的头指针
32.      temp->next=curr;    //将a1链接在a2之后
33.      curr->next=NULL;
34.    }
35.    return reverse_head;    //(a2,…an)逆转链表的头指针即为(a1,a2,…an)逆转链表的头指针
36.}

这道题你会答吗?花几分钟告诉大家答案吧!