【408DS算法题】017基础-将单链表就地逆置

题目

给定单链表的头结点,将该链表的各个结点进行逆置,即将每个结点的后继结点修改为其前驱结点。


分析实现

对于逆置单链表的结点这一操作,若要在循环中完成逆置需要满足以下三个条件:

  1. 为完成逆置操作,需记录下当前结点的前驱结点,通过修改当前结点的next指针进行逆置
  2. 为确保逆置操作能在循环执行,需要记录当前结点的后继结点,作为当前逆置操作执行进度的标记
LNode* reverseList(LNode *head){
	LNode *cur = head->next;
	// 指向当前结点cur的前驱结点
	LNode *pre = NULL;
	// 指向当前结点cur的后继结点
	LNode *sub;
	
	while(cur){
		sub = cur->next;
		// 进行结点的逆置操作
		cur->next = pre;
		// 更新pre和cur指针
		pre = cur;
		cur = sub;
	}
	// 循环结束时cur为NULL,pre指向逆置后的首结点
	head->next = pre;
	return head;
}

总结分析

以上就是通过三个指针循环完成单链表结点逆置操作的实现,操作过程并不复杂,重点在于创建含义明确的指针变量进行操作。此外,将变量明定义得简洁明了也很重要,在不断地编码中设立一套自己的命名习惯,可以减少很多重复混乱的记忆。

此处的命名来源:

cur;	// current-当前的
pre;	// previous-上一个的
sub;	// subsequent-随后的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值