码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode之反转链表图文详解

时间:2018-07-28 00:07:54      阅读:1035      评论:0      收藏:0      [点我收藏+]

标签:完成   ble   head   输出   一个   操作   次数   返回   etc   

206-反转链表

题目:

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

思路:

迭代法:

新建一个链表的头部,循环遍历旧链表的结点,将其加到新链表的后面

递归法

代码:(迭代法)

/**
 * 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 new=null;//新建一个结点,依此来作为新表的尾结点
        ListNode p = head;//新建一个结点p,指向head的第一个结点
        while(!head){
            ListNode tmp = p.next;//tmp用来暂时存放p.next
            p.next=new;/*将p(旧链表的的第一个结点)指向新结点,即p成为了新链表的第一个结点;同时注意这里将p.next的值改变,所以需要上一步暂时存放剩下旧链表的第一个结点*/
            new=p;/*将新链表的头指针始终指向新链表的第一个结点*/
            p=tmp;/*将剩下的旧链表的第一个结点赋值给p*/
        }
        return new;
    }
}

(递归法):

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
      if(head==null || head.next==null){/*递归的终止条件,返回的尾结点*/
          return head;
      }
      else{
          ListNode p = head.next;//a
          ListNode rehead = reverseList(p);//b
          p.next = head;//c
          head.next=null;//d
          return rehead;              
        }
    }
}

递归法详解:(参考上代码)

次数 head p
0 1 2
1 2 3
2 3 4
3 4 5
4 5 null

上图表示的是递归次数对应的head,p值

  • 首先进if判断,不符合然后进else,执行到a处时,即表上次数为0时图示为:

技术分享图片

  • 然后递归,在最后一层递归的时候,进终止递归判断的时候,即次数为4图示为:

技术分享图片

然后返回head

  • 返回后次数为3,p为返回的head=5 此时的图示为:

技术分享图片

详解次数为3的情况:

  • 执行b完时图示为:

技术分享图片

  • 继续执行,执行完c时的图示为:

    技术分享图片

    • 继续执行,执行完d时的图示为:

      技术分享图片

      然后返回rehead

返回后的次数为2,即head为3,p为4,执行完b后的图示:

技术分享图片

依次执行c、d等操作,等次数为0执行完d时就完成了链表的反转了:

技术分享图片

这么看来rehead即为反转后的链表的第一个结点,至此反转结束。

leetcode之反转链表图文详解

标签:完成   ble   head   输出   一个   操作   次数   返回   etc   

原文地址:https://www.cnblogs.com/ICDAT/p/9380025.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!