题目
给定单链表的头结点,将该链表的各个结点进行逆置,即将每个结点的后继结点修改为其前驱结点。
分析实现
对于逆置单链表的结点这一操作,若要在循环中完成逆置需要满足以下三个条件:
- 为完成逆置操作,需记录下当前结点的前驱结点,通过修改当前结点的next指针进行逆置
- 为确保逆置操作能在循环执行,需要记录当前结点的后继结点,作为当前逆置操作执行进度的标记
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-随后的