始终维护三个链表节点,即当前节点,前一个节点与下一个节点。
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
struct Node{
int key;
Node* next;
Node(int k) : key(k), next(nullptr){}
};
Node* makeList(const vector<int>& vec){
Node* head = nullptr;
Node* node = nullptr;
for(size_t i = 0; i < vec.size(); ++i){
if(i == 0){
node = new Node(vec[i]);
head = node;
}else{
node->next = new Node(vec[i]);
node = node->next;
}
}
return head;
}
Node* invert(Node* head){
if(head == nullptr || head->next == nullptr) return head;
Node* pre = head;
Node* cur = head->next;
Node* nxt = nullptr;
pre->next = nullptr;
while(cur){
nxt = cur->next;
cur->next = pre;
pre = cur;
cur = nxt;
}
return pre;
}
int main(){
int arr[] = {0,1,2,3,4,5,6,7,8,9};
vector<int> vec(arr, arr + sizeof(arr)/sizeof(int));
Node* head = makeList(vec);
Node* h = invert(head);
while(h){
cout << h->key << " ";
h = h->next;
}
return 0;
}