LeetCode 206. 反转链表 C语言

206. 反转链表


反转一个单链表。

示例:

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



解法1:遍历


假定链表如下。
在这里插入图片描述

遍历这个链表。我们可以定义两个指针n1,n2,分别指向1和2,让2的next指向1。让n1,n2向后移动。如此往复。

在这里插入图片描述

但n2的next指向1后,n2和链表后续断开连接了,需要再定义一个指针n3存储n2的下一节点地址。

在这里插入图片描述

链表的最后一个元素的next需要指向NULL,我们让n1指向NULL。

在这里插入图片描述

遍历链表,设置n2为循环条件,当n2为NULL停止循环。此时n1就指向链表头部。

在这里插入图片描述



代码示例:

struct ListNode* reverseList(struct ListNode* head) {
    
    

	if (head == NULL || head->next == NULL) //如果只有链表为NULL或者链表只有一个元素就直接返回。
	{
    
    
		return head;
	}

	struct ListNode* n1 = NULL, * n2 = head, * n3 = head->next; //双指针迭代。n3用来保存next。

	while (n2)
	{
    
    
		n2->next = n1;

		n1 = n2;
		n2 = n3;

		if (n3)//防止对空指针解引用操作
			n3 = n3->next;
	}

	return n1; //返回链表head
}

猜你喜欢

转载自blog.csdn.net/juggte/article/details/115419228
今日推荐