[剑指offer][Java]反转链表

2019-06-20  本文已影响0人  Maxinxx

题目

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

程序核心思想

因为要使一个结点的next指针指向它前面的结点,就需要一个或两个指针来记录这两个结点(一个也行?a.next.next = a),但是一定需要再加一个指针来记录这个结点——它的next结点指向上一个结点(如果不多加一个指针,会失去它原来next指针指向的下一个结点的信息)——的下一个结点。然后分别移动一位,修改指向即可。

Tips

代码

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head == null)    return null;
        
        ListNode a = head;
        ListNode b;
        ListNode c;
        
        if(a.next != null){
            b = a.next;
        }else{
            return a;
        }
            
        if(b.next != null){
            c = b.next;
        }else{
            b.next = a;
            a.next = null;
            return b;
        }
        
        a.next = null;
        while(c != null){
            b.next = a;
            a = b;
            b = c;
            c = c.next;
        }
        b.next = a;
        return b;
    }
}
上一篇下一篇

猜你喜欢

热点阅读