反转链表
反转链表
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
我的思路
1.使用迭代,递归掌握不太好。
代码
//
// Created by HINTS on 2019/1/10.
//
#include <iostream>
using namespace std;
// Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
/*
ListNode* reverseList(ListNode* head) {
ListNode *res = new ListNode(-1);
while(head){
ListNode *temp = new ListNode(head->val);
temp->next = res->next;
res->next = temp;
head = head->next;
}
return res->next;
}
*/
ListNode* reverseList(ListNode* head) {
if(!head || !head->next)
return head;
ListNode *p = head;
head = reverseList(p->next);
p->next->next = p;
p->next = NULL;
return head;
}
int main(){
ListNode* l1 = new ListNode(1);
l1->next = new ListNode(2);
l1->next->next = new ListNode(4);
ListNode *res = reverseList(l1);
while (res){
cout << res->val <<endl;
res = res->next;
}
return 0;
}