首页 > 其他 > 详细

Leet206 反转链表

时间:2020-03-24 21:51:22      阅读:53      评论:0      收藏:0      [点我收藏+]

题目描述:

反转一个单链表:

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
  1. 迭代方法

在刚开始接触这个题目的时候,自己初学,想到的是每一个节点单独存储,然后重新见一个链表来进行连接。

采用迭代的方法,是要遍历这个链表,将当前的节点的next指针指向其的前一个节点,第一个是nul值;

由于当前节点的next指针会发生变化,所以一开始要先保存其的下一个指针在修改next指针;

/**
 * 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 pre=null;
        ListNode cur=head;
        ListNode temp=null;
        while(cur!=null)
        {
            temp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=temp;
        }
       return pre;
    }
}
 
 
2.递归的方法
 
递归在这里最重要的理解后一部分已经反转成功,但前一部分还没有进行反转;
nk.next.next=nk;
nk.next=null;
上面的两句是关键,因为所有的链表都可以简化成下列形式:
 
1->2->3->4->null
 
           ->null
1->2->3<-4
 
在经历后,会形成null的回环;
 
//递归
public static ListNode reverseList(ListNode h)
{
if(h==null||h.next==null) return h;
ListNode p=reverseList(h.next);
h.next.next=h;
h.next=null;
return p;
}

Leet206 反转链表

原文:https://www.cnblogs.com/wz-xd/p/12561959.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!