翻转链表的方法有很多,如果是逆序输出链表,并且链表不是特别长的情况可以考虑直接用递归,以压栈的形式输出,然而,很多情况下是不会这么操作的(为什么呢?因为面试官要求的(▼へ▼メ))。所以考虑以交换结点指向的方式来翻转链表;
分析:
1 2 3 4 5
思路肯定就是将 2缓存起来,然后1指向3,2指向1,就变成了
2 1 3 4 5
上面是第一次交换,第二次交换是将3缓存起来,然后1指向4,3指向2,就变成了
3 2 1 4 5
然后为了找规律咱们再进行一次交换是将4缓存起来,然后1指向5,4指向3,就变成了
4 3 2 1 5
经过三次交换我们得出一个规律,首先都是将1(也就是原链表的头结点)后面的结点缓存起来,然后指向缓存起来的结点的下一个结点,缓存起来的结点指向现链表的头结点。
结论:因此需要三个对象来完成操作,分别是原链表的头结点,现链表的头结点,还有缓存结点,其中缓存结点是原链表头结点的下一个结点;
算法如下: