赞
踩
题目参考 反转链表
目录
链表的反转是非常基础的一种操作,在《剑指Offer》以及其他大部分面试书中基本都有这个简单的题目作为铺垫。首先分析旋转:
链表的反转有两种方式:一种是递归;一种是迭代
本篇文章就两种方式进行分析以及实现
- public class ListNode {
- int val;
- ListNode next;
- ListNode(int x) { val = x; }
- }
迭代反转是从链表的开头一个一个反转到结束
时间复杂度:O(n),假设 nn 是列表的长度,时间复杂度是 O(n)。
空间复杂度:O(1)。
-
- public ListNode reverseList(ListNode head) {
- ListNode result = null;
- ListNode current = head;
- while(current!=null){
- ListNode tempNode = current.next;
- current.next = result;
- result = current;
- current = tempNode;
- }
- return result;
- }
思路可拆分为
从尾部开始递归,一直反转到头部,实现整个链表的反转
递归对于迭代要稍微难理解一点,不过仔细思考思考还是能理解出来的。
- public ListNode reverseList(ListNode head) {
- if (head == null || head.next == null) return head;
- ListNode p = reverseList(head.next);
- head.next.next = head;
- head.next = null;
- return p;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。