/*
解题思路
第一次遍历链表,记录链表长度
新建一个数组,长度为链表长度
第二次遍历链表,将链表值记录在数组里
第三次遍历链表,按照数组元素的逆序修改链表的值
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *p = head;
int n = 0;
int i;
if(p == NULL || p->next == NULL){
return head;
}
while(p){
n++;
p = p->next;
}
int a[n];
for(i = 0, p = head; p; i++, p=p->next){
a[i] = p->val;
}
for(i = n-1, p = head; p; i--, p=p->next){
p->val = a[i];
}
return head;
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *p = head;
struct ListNode *pre = NULL;
struct ListNode *q;
while(p){
//printf("%d ", p->val);
q = p->next;
p->next = pre;
pre = p;
p = q;
}
return pre;
}