一、算法方案
p指向第一个有效节点,头指针headpointer的指针域为空,p逐个后移,并将p指向的当前元素以头插的方式插入到头指针
二、代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int add_node_head(struct ListNode* head, struct ListNode* new_node);
struct ListNode* reverseList(struct ListNode* head)
{
//个人习惯,也为了操作,加个头指针,当然不加也行
//方法一:头插法========》以头插法的方式将原链表的数据添加链表
struct ListNode *headpointer=(struct ListNode *)malloc(sizeof(struct ListNode));
headpointer->next=NULL;//头指针指向第一个节点,此时应为空
struct ListNode *p=head;
struct ListNode *temp=NULL;
while(p!=NULL)
{
temp=p->next;
add_node_head(headpointer,p);
p=temp;
}
return headpointer->next;//注意返回值是返回第一个有效节点
}
int add_node_head(struct ListNode* head, struct ListNode* new_node)
{
if(NULL == head || NULL == new_node)
return -1;
new_node->next = head->next;
head->next = new_node;
return -1;
}