Leetcode Tencent 50 206. Reverse Linked List
描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
来源:力扣(LeetCode)
链接:206. Reverse Linked List
解题思路
迭代的思路,创建一个辅助链表newHead,初始指向NULL节点,然后遍历原链表head,将原链表的每个节点依次加到新的辅助链表的前面,同时同步移动辅助链表头节点的指针。具体见下图:

在遍历链表时,将当前节点的next指针改为指向前一个元素,也就是反向指向当前节点。但是,因为是单链表,当前节点没有引用其上一个节点,因此必须事先存储其前一个元素。另外,也基于这样的考虑,在更改引用之前,还需要一个临时节点来存储下一个节点。最好返回辅助链表newHead的头指针。具体代码见解法一。
递归的思路,看看上图的STEP 1,核心的步骤就是将当前节点作为当前节点下一节点的next节点,然后为了避免成环,将当前节点指向下一节点的引用打断,以上两个步骤可以通过下面两行代码实现:
1 | head->next->next = head; //将当前节点作为当前节点下一个节点的next节点 |
详细代码看解法二。
代码
解法一:迭代解法
1 | /** |
解法二:递归解法
1 | /** |