博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反转链表 Reverse Linked List
阅读量:5116 次
发布时间:2019-06-13

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

2018-09-11 22:58:29

一、Reverse Linked List

问题描述:

问题求解:

解法一:Iteratively,不断执行插入操作。

public ListNode reverseList(ListNode head) {        if (head == null) return null;        ListNode dummy = new ListNode(-1);        dummy.next = head;        ListNode cur = head;        ListNode then = null;        while (cur.next != null) {            then = cur.next;            cur.next = then.next;            then.next = dummy.next;            dummy.next = then;        }        return dummy.next;    }

解法二:Recursively,不断向newHead前面加入新的节点

public ListNode reverseList(ListNode head) {        /* recursive solution */        return reverseListInt(head, null);    }    private ListNode reverseListInt(ListNode head, ListNode newHead) {        if (head == null)        return newHead;        ListNode next = head.next;        head.next = newHead;        return reverseListInt(next, head);    }

 

二、Reverse Linked List II

问题描述:

问题求解:

反转链表一直是一个很经典的问题,本题中其实是最经典的全局反转的一个改进和加深,本题的求解思路完全可以套用到全局反转中。

本题实际使用的思路是一种插入的思路,维护了三个指针prev,cur,then。

prev : 初始位置的前一个位置,始终不变,后续就是在prev后进行插入;

cur : 不断迭代,指向需要插入的节点的前一个位置;

then : cur的下一个节点,是每次需要进行插入的节点,同时需要不断迭代。

public ListNode reverseBetween(ListNode head, int m, int n) {        ListNode dummy = new ListNode(-1);        dummy.next = head;        ListNode prev = dummy;        ListNode cur = dummy;        ListNode then = null;        for (int i = 0; i < m; i++) {            prev = cur;            cur = cur.next;            then = cur.next;        }        for (int i = 0; i < n - m; i++) {            cur.next = then.next;            then.next = prev.next;            prev.next = then;            then = cur.next;        }        return dummy.next;    }

 

转载于:https://www.cnblogs.com/TIMHY/p/9630973.html

你可能感兴趣的文章
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>