导航

LeetCode206:Reverse Linked List

Posted on 2018-02-01 16:46  老刘想当个AI工程师  阅读(110)  评论(0)    收藏  举报

首先说一下我的刷题计划和过程,B站有关于leetcode的算法视频,我是边看边刷,有的视频上面有一些代码有错,建议大家还是多多自己判断。

法一 邦邦邦~~~~

原始链表:①------>②------>③------>④------>⑤------>null

     head

摘下一个元素组成新链表:

  ②------>③------>④------>⑤------>null(原始)

  ↑

head(将head后移一位)

 

 

  ①(新)

   ↑

newhead

摘下两个元素组成新链表:

  ③------>④------>⑤------>null(原始)

  ↑

head(将head后移一位)

 

   ②------>①(新)

    ↑

newhead

摘下三个元素组成新链表:

④------>⑤------>null(原始)

head(将head后移一位)

 

 

③------>②------>①(新)

newhead

这个方法没有用到递归,简单的说,首先将原先链表的最前端元素(①),摘下,再将摘下此元素后的链表最前端(②)元素摘下,不断的组成新链表,放在新链表的最前面。

 

/**
* Definition for singly-linked list. */

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/

class Solution {
public ListNode reverseList(ListNode head) {
ListNode newhead = null;//新链表的头部指向标
while (head!=null){
ListNode next=head.next;//创建一个变量用来存储原始链表的当前第二个元素 也就是移除头部元素之后将会变成头部元素的元素
head.next = newhead;//
newhead = head;
head = next;
}
return newhead;
}
};

 

法二 邦邦邦~~~~~~~:

  1. /** 
  2.  * Definition for singly-linked list. 
  3.  * public class ListNode { 
  4.  *     int val; 
  5.  *     ListNode next; 
  6.  *     ListNode(int x) { val = x; } 
  7.  * } 
  8.  */  
  9. public class Solution {  
  10.     public ListNode reverseList(ListNode head) {  
  11.         if(head==null) return null;  
  12.         if(head.next==null) return head;  
  13.           
  14.         ListNode p = head.next;  
  15.         ListNode n = reverseList(p);  
  16.            //实现逆序
  17.         head.next = null; 
  18.         p.next = head;  
  19.         return n;  
  20.     }  
  21. }