博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode] Reverse Linked List 链表反转(递归与非递归)
阅读量:6622 次
发布时间:2019-06-25

本文共 2668 字,大约阅读时间需要 8 分钟。

Reverse a singly linked list.

代码

ReverseLinkedList.java

package list;public class ReverseLinkedList {        /**     * 描述 Reverse a singly linked list.     *      * 1. 调转指针解法(非递归)     * 用三个指针 prev,cur,next ,紧紧相邻,不断前进,每次将 cur.next 指向 prev ,将 prev指向cur, cur 指向 next 。     */    public ListNode Solution1(ListNode head){                if(head == null || head.next == null)            return head;                ListNode prev = null;        ListNode cur = head;        while(cur != null){            ListNode next = cur.next;            cur.next= prev;            prev = cur;            cur = next;                    }                return prev;    }/** * 描述 Reverse a singly linked list. *  * 2. recursive 递归解法 *  */public ListNode Solution2(ListNode head){        if(head == null || head.next == null)        return head;    ListNode cur = head;        ListNode ret = recurList(cur.next);        ListNode tmp = ret;    while (tmp.next != null)        tmp = tmp.next;    tmp.next = head;    head.next = null;        return ret;}private ListNode recurList(ListNode head) {        if (head == null || head.next == null)      return head;        ListNode tail = Solution2(head);    return tail;}

}

测试

ReverseLinkedListTest

package list;import org.junit.Assert;import org.junit.Before;import org.junit.Test;public class ReverseLinkedListTest {private ReverseLinkedList s;        @Before        public void setUp() {         s = new ReverseLinkedList();        }         @Test    public void testSolution1() {                 ListNode one = new ListNode(1);        ListNode two = new ListNode(2);        ListNode three = new ListNode(3);        ListNode four = new ListNode(4);        ListNode five = new ListNode(5);                one.next = two;        two.next = three;        three.next = four;        four.next = five;        ListNode result = s.Solution1(one);//        Assert.assertEquals(expect, result);                ListNode tmp = result ;        while (tmp!= null){            System.out.println(tmp.val);            tmp = tmp.next;        }    }        @Test    public void testSolution2() {                 ListNode one = new ListNode(1);        ListNode two = new ListNode(2);        ListNode three = new ListNode(3);        ListNode four = new ListNode(4);        ListNode five = new ListNode(5);                one.next = two;        two.next = three;        three.next = four;        four.next = five;        ListNode result = s.Solution2(one);//        Assert.assertEquals(expect, result);                ListNode tmp = result ;        while (tmp!= null){            System.out.println(tmp.val);            tmp = tmp.next;        }    }}

结果

5432154321

转载地址:http://uljpo.baihongyu.com/

你可能感兴趣的文章
【IOS-COCOS2D-X 游戏开发之二】【必看篇】总结阐述COCOS2D-X与COCOS2D-IPHONE区别;
查看>>
ExtJs之Ext.core.Element
查看>>
六套 App:构建我的产品设计工作流
查看>>
eoLinker-API_Shop_通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等...
查看>>
因为小程序的scroll-view组件不能下拉刷新我做了个开源项目
查看>>
JavaScript 垃圾回收机制
查看>>
前端面试回忆录 - 滴滴篇 - 凉面
查看>>
jxl导入Excel 切割List 并使用MyBatis批量插入数据库
查看>>
BMIP002协议介绍
查看>>
前端的一些基础知识
查看>>
小程序开发总结
查看>>
重绘与回流
查看>>
win10系统设置webp文件默认用照片查看器打开的两种方法
查看>>
使用阿里云发送邮件
查看>>
Tomcat监听器设计思路
查看>>
react native 入门之javascript
查看>>
管理ORACLE实例
查看>>
Confluence 6 MySQL 数据库设置准备
查看>>
Ruby 中 0/0.0 = NaN
查看>>
Confluence 6 教程:空间高手
查看>>