定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
首先po上代码
struct ListNode* reverseList(struct ListNode* head){
if(head==NULL||head->next==NULL)
{
return head;
}
struct ListNode* n1=NULL,*n2=head,*n3=head->next;
while(n2)
{
//反转
n2->next=n1;
//迭代
n1=n2;
n2=n3;
if(n3)
n3=n3->next;
}
return n1;
}
让我们来分析一下此题的逻辑
实际上就是将链表的顺序颠倒,即递归到最后一个结点为头结点
画个图解释一下
我们可以定义三个变量:n1 n2 n3
1.改变顺序也就是
//反转
n2->next=n1;
2.迭代
n1=n2;
n2=n3;
if(n3) //该语句为当n3走到空的时候,进入此条件
n3=n3->next;