剑指Offer:反转列表(24)

题目描述:

输入一个链表,反转链表后,输出新链表的表头。

解题思路:

比较简单,直接上代码

递归:

 1 class Solution {
 2     public ListNode reverseList(ListNode head) {
 3         //递归终止条件是当前为空,或者下一个节点为空
 4         if(head==null || head.next==null) {
 5             return head;
 6         }
 7         //这里的cur就是最后一个节点
 8         ListNode cur = reverseList(head.next);
 9         //这里请配合动画演示理解
10         //如果链表是 1->2->3->4->5,那么此时的cur就是5
11         //而head是4,head的下一个是5,下下一个是空
12         //所以head.next.next 就是5->4
13         head.next.next = head;
14         //防止链表循环,需要将head.next设置为空
15         head.next = null;
16         //每层递归函数都返回cur,也就是最后一个节点
17         return cur;
18     }
19 }

迭代:

 1 class Solution {
 2     public ListNode reverseList(ListNode head) {
 3         //申请节点,pre和 cur,pre指向null
 4         ListNode pre = null;
 5         ListNode cur = head;
 6         ListNode tmp = null;
 7         while(cur!=null) {
 8             //记录当前节点的下一个节点
 9             tmp = cur.next;
10             //然后将当前节点指向pre
11             cur.next = pre;
12             //pre和cur节点都前进一位
13             pre = cur;
14             cur = tmp;
15         }
16         return pre;
17     }
18 }
原文地址:https://www.cnblogs.com/lkylin/p/13539385.html