反转链表
问题描述
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路
采用递归的思想进行
采用反向递归的方法分为以下步骤
1.迭代递归找到尾部结点。尾部节点的定义为node->next == NULL
2.将尾部节点指向尾部节点的前一个节点,然后前面的一个节点变成新的尾部节点。
3.尾部节点更新,直至到第一个元素位置
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (head == NULL || head->next == NULL)
return head;
else
{
ListNode * newhead = reverseList(head->next);//先反转后面的链表,从最后面的两个结点开始反转,依次向前
head->next->next = head;//将后一个链表结点指向前一个结点
head->next = NULL;//将原链表中前一个结点指向后一个结点的指向关系断开
return newhead;
}
}
};