题目:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表
答案:见下图
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode* n1=NULL,* n2 = head,* n3 = head->next;
if (n2 == NULL || n2->next == NULL)
{
return n2;
}
while (n2)
{ //反转
n2->next = n1;
//迭代
n1 = n2;
n2 = n3;
n3 = n3->next;
}
return n1;
}
解析:
反转链表,我们不难想出可以利用原有的头部当作尾部指向NULL,原有的尾部当头部,进行写入
操作如下:
因为要把原有的头部当作尾部指向NULL,这里我们定义结构体n1=NULL,n2=head,n3=head->next;
(1)判断
链表可能存在为空或者只有一个元素的情况,这两种情况反转的结果和其未反转的本身都一样,所以在进行写入时我们先进行判断,即
if (n2 == NULL || n2->next == NULL)
{
return n2;
}
(2)反转
这里我们采用while循环其条件为n2
使n2->next=n1,指向任务完成
(3)迭代
向下继续循环
n2->next = n1;
n1 = n2;
n2 = n3;
if (n3)
n3 = n3->next;
继续当n2不为空时进行循环
此时n3=NULL,n3不继续向下走了
n3 = n3->next,此步代码结束
继续向下走,则有
此时n2=NULL=n3,while(n2),中n=NULL,为假,退出while循环
于是,我们便得到了反转链表,n1
(4)返回
接下来返回n1,即,return n1;
反转链表解题完成
如果对您有帮助的话,点一个免费的赞和收藏叭!