反转单链表递归详解

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

方法一:三指针法

这种办法实际上就是用next指针记住当前位置的后一个节点,然后让当前节点与之前节点反转链接,然后让当前位置变为next,具体代码如下

struct ListNode* reverseList(struct ListNode* head)
{
	struct ListNode* cur = head;
	struct ListNode* prev = NULL;
	struct ListNode* next;
	while(cur)
	{
		next = cur -> next;
		cur -> next = prev;
		prev = cur;
		cur = next;
	}
	return prev;
}

方法二:递归(详解)

我们使用递归的原理是每次调用函数让他的头指针向后走,直到走到尾节点,我们将尾节点作为头,然后递归回去相当于我们倒着访问了这个单链表,具体的过程我们画成了一幅图,图如下奉上。(鼠标点击图片可以放大哦)

鼠标右击全屏查看更清晰哦

代码如下。

struct ListNode* reverseList(struct ListNode* head) 
{
	if(head == NULL || head -> next == NULL) return head;
	struct ListNode* h = reverseList(head -> next);
	head -> next -> next = head;
	head -> next = NULL;
	return h;
}

猜你喜欢

转载自blog.csdn.net/lucky52529/article/details/84672526