方法一
假设有下面这样一个单向链表
想要将其反转输出,即得到4->3->2->1这样一个链表,我首先想到的是从拿到最后一个节点前面一个节点将他删除接在最后一个节点的后面依次下去不就可以了么
但是这样就需要五个指针:
- head指针记录开始位置。
- mark指针记录原本的尾节点位置,因为当有节点接在原本尾节点之后就无法用
next=null
来找到原本的尾节点。 - pre指针记录mark的前一个节点,用于删除和重新拼接
- beforePre指针记录pre的前一个节点,要将他指向最后一个节点,用于下一次遍历
- 新的尾节点
但是这样是不是太麻烦了呢?五个指针记录,每次找到原尾节点的前一个值就需要一次遍历链表
方法二
如何只用遍历一次就可以完成呢?先将前两个反转