写代码,反转一个单链表,分别以非递归和递归的形式来实现
数据结构:
typedef struct node LinkNode;
struct node
{
int data;
LinkNode* next;
};
返回新链表头结点:
LinkNode *reverse_link(LinkNode *head)
LinkNode *reverse_link_recursive(LinkNode *head)
LinkNode *reverse_link_recursive(LinkNode *head)
代码实现:
copy
- // 返回新链表头节点
- LinkNode *reverse_link(LinkNode *head) //非递归
- {
- if(head == NULL)
- return NULL;
- LinkNode *prev , *curr , *reverse_head , *temp;
- prev = NULL , curr = head;
- while(curr->next)
- {
- temp = curr->next;
- curr->next = prev;
- prev = curr;
- curr = temp;
- }
- curr->next = prev;
- reverse_head = curr;
- return reverse_head;
- }
- LinkNode *reverse_link_recursive(LinkNode *head) //递归算法
- {
- if(head == NULL)
- return NULL;
- LinkNode *curr , *reverse_head , *temp;
- if(head->next == NULL) // 链表中只有一个节点,逆转后的头指针不变
- return head;
- else
- {
- curr = head;
- temp = head->next; // temp为(a2,...an)的头指针
- reverse_head = reverse_link_recursive(temp); // 逆转链表(a2,...an),并返回逆转后的头指针
- temp->next = curr; // 将a1链接在a2之后
- curr->next = NULL;
- }
- return reverse_head; // (a2,...an)逆转链表的头指针即为(a1,a2,...an)逆转链表的头指针
- }
本文详细介绍了如何使用非递归和递归两种方式来反转单链表,提供了完整的代码实现和解释。

798

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



