[leetcode]206. Reverse Linked List

来源:互联网 发布:java递归对象中的属性 编辑:程序博客网 时间:2024/05/17 02:14

题目描述:

Reverse a singly linked list.

解题思路:

这个题有两种思路:递归和迭代,迭代相对于递归方式更加直观。

引入:算法中的自顶向下和自底向上

动态规划的实现分为两种,有递归和迭代。
递归一般是自顶向下,依赖于子问题优化函数的结果,只有子问题完全求出,也就是子问题的递归返回结果,原问题才能求解。
迭代法,就是巧妙的安排求解顺序,从最小的子问题开始,自下而上求解。每次求新的问题时,子问题的解已经计算出来了。

迭代法:

    /**      * Definition for singly-linked list.      * public class ListNode {      *     int val;      *     ListNode next;      *     ListNode(int x) { val = x; }      * }      */      public class Solution {          public ListNode reverseList(ListNode head) {              if(head==null || head.next==null) return head;              ListNode pre = head;              ListNode p = head.next;              pre.next = null;              ListNode nxt;              while(p!=null) {                  nxt = p.next;                  p.next = pre;                  pre = p;                  p = nxt;              }              return pre;          }      }  

递归法:

/**  * Definition for singly-linked list.  * public class ListNode {  *     int val;  *     ListNode next;  *     ListNode(int x) { val = x; }  * }  */  public class Solution {      public ListNode reverseList(ListNode head) {          if(head==null) return null;          if(head.next==null) return head;          ListNode p = head.next;          ListNode n = reverseList(p);          head.next = null;          p.next = head;          return n;      }  } 
0 0
原创粉丝点击