leetcode-反转链表-46

Posted 天津 唐秙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-反转链表-46相关的知识,希望对你有一定的参考价值。

题目要求
  定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
思路
  设计三个指针,最快的指针tail用来判断链表是否走完,中间的节点cur和最后面的节点prev负责翻转,然后如果的tail->next不为空,所有节点往后走一步。

代码实现

class Solution {
public:
	ListNode* reverseList(ListNode* head) {
		//解决了节点个数为1或者为0的情况
		if (head == NULL || head->next == NULL)
		{
			return head;
		}
		ListNode* prev = head;
		//解决两个节点
		ListNode* cur = prev->next;
		prev->next = NULL;
		if (cur->next == NULL)
		{
			cur->next = prev;
			return cur;
		}

		ListNode* tail = cur->next;
		cur->next = prev;
		while (tail->next != NULL)
		{
			prev = cur;
			cur = tail;
			tail = tail->next;
			cur->next = prev;
		}
		tail->next = cur;
		return tail;
	}
};

以上是关于leetcode-反转链表-46的主要内容,如果未能解决你的问题,请参考以下文章

每天一道面试题LeetCode 206 -- 反转链表

剑指offerJZ15——反转链表。leetcode206.反转链表

LeetCode 206. 反转链表

LeetCode 92. 反转链表 II

leetcode之反转链表图文详解

Leetcode234. 回文链表(快慢指针+反转链表)