链表反转

题目:输入一个链表,反转链表后,输出新链表的表头。

 

思路:

1.从第一个节点开始逐个往后扫描

2.扫描到的节点为head,head的前一个节点为pre,后一个节点为next

3.next保存head的下一个节点,再断开head和后一个节点的连接,防止链表丢失

4.把pre赋给head.next,断开head与它后一个节点的连接,并连接head和他上一个节点

5.把head赋给pre,移动head到next的位置

6.循环3-5的步骤

 

代码:

public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head == null)
            return null;
        ListNode pre = null;
        ListNode next = null;
        while(head != null){
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
}

 

递归的方法:

递归遍历到最后一个节点,然后把当前节点设置为后面节点的后续节点,

public class Solution {
    public ListNode ReverseList(ListNode head) {
        //如果链表为空或者链表中只有一个元素
        if(head==null||head.next==null) 
            return head;
         
        //先反转后面的链表,走到链表的末端结点
        ListNode pReverseNode=ReverseList(head.next);
         
        //再将当前节点设置为后面节点的后续节点
        head.next.next=head;
        head.next=null;
         
        return pReverseNode;
    }
}

 

 

posted @ 2019-06-25 19:15  DIAO葫芦娃  阅读(163)  评论(0编辑  收藏  举报