算法基础~链表【将链表逆序题(不可申请额外的空间)~头插法】
算法只基础~链表
1,基本知识:
struct ListNode{ int val; //存储元素的数据域 ListNode * next; //存储下一个结点地址的指针域 }
2,简单例题【将链表逆序题(不可申请额外的空间)~头插法】
先看代码,再分析整个过程【so easy】
public class Solution { public ListNode* reverseList(ListNode* head){ ListNode* new_head = NULL; //指向新链表头结点的指针 while(head){ ListNode *next = head->next; head->next = new_head; new_head = head; head = next; } return new_head; //返回新链表头结点 } }
(1) 定义了一个新头指针 。 why?~ 看后边解析(1)
(2) 定义一个指向原来链表head的下一个结点的指针next。 why?~ 看后边解析(2)
先看思路过程,最后再解释why?
解释
(1)定义一个新头指针~链表的核心点就是头指针啦,通过头指针的next移动(获取当前结点位置)遍历完整个链表,so,头指针就是一个链表的象征
(2)定义一个指向原来链表head的下一个结点的指针next~因为第一个过程head指在1这个结点,head位置需要指向2这个结点然后开始第二个该过程,so,
next指针指向head的下个结点的作用,即标志到2这个结点的位置。
本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15032539.html