LeetCode 反转链表
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
void PrintList(ListNode* p)
{
while (p != NULL) {
cout << p->val<<" ";
p = p->next;
}
cout << endl;
}
ListNode* reverseList(ListNode* head) {
ListNode *pre = NULL;
ListNode *cur = head;
ListNode *tmp = NULL;
while (cur != NULL) {
//记录当前节点的下一个节点
tmp = cur->next;
//然后将当前节点指向pre
cur->next = pre;
//pre和cur节点都前进一位
pre = cur;
cur = tmp;
}
PrintList(pre);
return pre;
}
ListNode* createList(int n) {
ListNode* first = new ListNode(0);
first->next = NULL; //初始化一个空链表
ListNode* r = first;
for (int i = 0; i < n; i++)
{
ListNode* s = new ListNode(0);
s->val = i; //为每个数组元素建立一个结点
r->next = s;
r = s;
}
r->next = NULL;
return first;
}
int main(){
ListNode* head;
head = createList(5);
ListNode* head1;
head1 = reverseList(head->next);
return 0;
}