反转单链表

题目:

给你单链表的头节点 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;

反转链表解题完成

如果对您有帮助的话,点一个免费的赞和收藏叭!

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值