牛客网
输入一个链表,反转链表后,输出新链表的表头。
迭代
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class ListNode* rreverseList(ListNode* head) {
ListNode* newHead = new ListNode(-1);
while(head != NULL) {
ListNode* next = head->next;
head->next = newHead->next;
newHead->next = head;
head = next;
}
return newHead->next;
}
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* head = rreverseList(pHead);
return head;
}
};
递归
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class ListNode* rreverseList(ListNode* head) {
if(head->next==NULL||head == NULL){
return head;
}
ListNode* next = head->next;
head->next = NULL;
ListNode* newHead = rreverseList(next);
next->next = head;
return newHead;
}
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* head = rreverseList(pHead);
return head;
}
};
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
ListNode* newHea=new ListNode(-1);
class ListNode* rreverseList(ListNode* head) {
if(head->next==NULL||head == NULL){
newHea->next=head;
newHea=head;
return head;
}
ListNode* next = head->next;
head->next = NULL;
ListNode* newHead = rreverseList(next);
//next->next=head;
newHea->next=head;
newHea=head;
return newHead;
}
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* newHe=newHea;
ListNode* head = rreverseList(pHead);
return newHe->next;
}
};
#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <queue>
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
ListNode* newHea=new ListNode(-1);
ListNode* newHe2=newHea;
class ListNode* rreverseList(ListNode* head) {
if(head->next==NULL||head == NULL){
newHea->next=head;
newHea=head;
return head;
}
ListNode* next = head->next;
head->next = NULL;
ListNode* newHead = rreverseList(next);
//next->next=head;
newHea->next=head;
newHea=head;
return newHead;
}
ListNode* ReverseList(ListNode* pHead) {
ListNode* newHe=newHea;
ListNode* head = rreverseList(pHead);
return newHe;
}
int main(){
ListNode* phead = NULL;
phead = new ListNode(-1);
phead->next = NULL;
ListNode* p = phead;
for (int i = 1; i < 8; ++i) {
ListNode* pNewNode = new ListNode(i);
pNewNode->next = NULL;
p->next = pNewNode; // 上一个节点指向这个新建立的节点
p = pNewNode; // p节点指向这个新的节点
}
ListNode* p1 = ReverseList(phead);
//ListNode* p1 = newHe;
for (int i = 1; i < 8; ++i) {
ListNode* node=p1->next;
//if(i==7-k+1){
cout<<node->val<<endl;
//}
p1=p1->next;
}
ListNode* phead1 = NULL;
phead1 = new ListNode(-1);
phead1->next = NULL;
ListNode* p2 = phead1;
for (int i = 1; i < 8; ++i) {
ListNode* pNewNode = new ListNode(i);
pNewNode->next = NULL;
p2->next = pNewNode; // 上一个节点指向这个新建立的节点
p2 = pNewNode; // p节点指向这个新的节点
}
//ListNode* p3 = ReverseList(phead1);
ReverseList(phead1);
ListNode* p3 = newHe2;
//ListNode* p1 = newHe;
for (int i = 1; i < 16; ++i) {
ListNode* node=p3->next;
//if(i==7-k+1){
cout<<node->val<<endl;
//}
p3=p3->next;
}
}