【写在前面】
小弟不才,作为CS专业本科生,很多知识浮于表面,终于动手刷leetcode,图个开心吧!
先从一道十分基础的简单题[206.反转链表]起步。限于知识生疏了和脑子不灵光,整琢磨了一天,总算通过了。。。
其实大体思路不复杂,也有很多博主讲的很清晰,文后会放写的很清晰的博主的原贴链接,我在这就记录几个非常基础但却有给我带来困惑的知识细节吧。
【原题描述】
Reverse a singly linked list.
Example:
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
Follow up:
A linked list can be reversed either iteratively or recursively. Could you implement both?
【解题思路】
核心思路就是将链表中的每个指针反向,原链表头变表尾,返回原链表尾。
具体操作有两个方法:
1.定义三个指针变量分别指向当前节点、前一个节点、下一个节点,然后依次进行反转操作。这里直接上一个大神的动图,一目了然,超级赞!结尾会放原贴并且在此安利给大家!!!
2. 对原链表做头删操作、新链表做头插操作
定义两个指针变量newHead和tempNode分别用于表示新链表头和临时存储操作节点。该方法对于熟悉链表头插、头删的朋友是一个非常巧妙的方法
【细节问题】
- 链表的节点指针表达式(如curr->next这种形式)在赋值表达式左右两端的意义
next = curr->next; // 在等号右边表示next节点获取curr节点所指向的节点的地址
curr->