#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
//此题反转链表 本来是很简单的思路
//这里只想强调一下 便于边界研究分析 如何将简单的问题系统化
//不然手搓还是很费劲的
//思路就是找好系统的开始和结束 <<看准了每个循环的起始和结束状态>>
//这样的思维模拟 可以便于边界的分析研究
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* p1, * p2;
p2 = head;
if (head != NULL)
p1 = head->next;
else return head;
p2->next = NULL;
head=p1;
while (p1->next != NULL)
{
p1 = p1->next;
head->next = p2;
p2 = head;
head=p1;
}
head=p1;
p1->next=p2;
return head;
}
};
int main()
{//测试用例
struct ListNode* p1, * p2, * p3;
p1 = (ListNode*)malloc(sizeof(ListNode));
p1->val = 1;
p2 = (ListNode*)malloc(sizeof(ListNode));
p2->val = 2;
p1->next = p2;
p3 = p2;
p2 = (ListNode*)malloc(sizeof(ListNode));
p2->val = 3;
p3->next = p2;
p3 = p2;
p2 = (ListNode*)malloc(sizeof(ListNode));
p2->val = 4;
p3->next = p2;
p3 = p2;
p2 = (ListNode*)malloc(sizeof(ListNode));
p2->val = 5;
p3->next = p2;
p3 = p2;
p3->next = NULL;
Solution* m = new Solution;
m->reverseList(p1);
}
05-15
710

05-15
911
