首先要判断链表的情况,该链表可能存在情况是一个空链表,和多个节点的链表。
所以解决该链表需要先判断他是什么链表-----使用什么代码来决解问题
1.决解空链表 ---如果为空的话直接输出改链表
if(head==NULL||head->next==NULL)
return head;
2.多节点的话就需要开辟三个节点,第一个指向为空,第二个指向链表头部,第三个指向链表头部的下一个节点
前面的typedef重新命名结构体定义
typedef struct ListNode node;
struct ListNode* reverseList(struct ListNode* head){
if(head==NULL||head->next==NULL)
return head;
node* Listn1 = NULL,*Listn2=head,*Listn3=head->next;
3.利用循环反转链表,迭代链表注意结束条件
while(Listn2)
{
//反转
Listn2->next=Listn1;
//迭代
Listn1=Listn2;
Listn2=Listn3;
if(Listn3)
Listn3=Listn3->next;
}
return Listn1;
完整代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode node;
struct ListNode* reverseList(struct ListNode* head){
if(head==NULL||head->next==NULL)
return head;
node* Listn1 = NULL,*Listn2=head,*Listn3=head->next;
while(Listn2)
{
//反转
Listn2->next=Listn1;
//迭代
Listn1=Listn2;
Listn2=Listn3;
if(Listn3)
Listn3=Listn3->next;
}
return Listn1;
}