206. 反转链表

https://leetcode-cn.com/problems/reverse-linked-list/

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

自己的想法:头插法,每次找到最后一个节点以及它的前驱,第一个插入头结点之后,然后一个个插入这个节点之后。

代码:

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null || (head.next==null))
        {
            return head;
        }
        ListNode HeadReal = new ListNode(-999);
        ListNode Temp = new ListNode(-999);
        ListNode Final=new ListNode(-999);
        ListNode Count=new ListNode(-999);
        ListNode test=new ListNode(-999);
        long lenth=0;

        HeadReal.next=head;
        for(Count=HeadReal.next;Count!=null;Count=Count.next)
        {
            lenth=lenth+1;
        }


        
            
             for(Temp=HeadReal.next;Temp.next.next!=null;Temp=Temp.next)
            {
            // System.out.println(Temp.val);
            }
            // System.out.println(Temp.val);
            Final=Temp.next;
            Final.next=HeadReal.next;
            HeadReal.next=Final;
            Temp.next=null;
            head=Final;
            HeadReal.next=head;

            // System.out.println(head.val);
        // for(int)
        for(int i=0;i<lenth-2;i++)
        {
            for(Temp=HeadReal.next;Temp.next.next!=null;Temp=Temp.next)
            {
            // System.out.println(Temp.val);
            }
            // System.out.println("Temp.val");
            // System.out.println(Temp.val);
            Final=Temp.next;
            Final.next=HeadReal.next.next;
            HeadReal.next.next=Final;
            Temp.next=null;
            HeadReal.next=Final;

        }
             

            //  System.out.println("HeadReal.next.next");
            // System.out.println(HeadReal.next.next.val);
            
            // HeadReal.next=Final;
            // System.out.println("Final.val");
            // System.out.println(Final.val);
            // Temp.next=null;

            // HeadReal.next.next=test;
            // System.out.println("head.val");
            // System.out.println(head.next.val);



          



       


        // System.out.println(head.val);
        // System.out.println(head.next.val);
        // System.out.println(HeadReal.next.val);
        // HeadReal.next

        // for(Temp=head;Temp!=null;Temp=Temp.next)
        // {
        //     System.out.println(Temp.val);
        // }








        
        return head;
    }
}

然后,Leetcode官方解答:

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode nextTemp = curr.next;
        curr.next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}

 查看题解:https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/

这个方法之后可以用再别的翻转的方式上。

原文地址:https://www.cnblogs.com/William-xh/p/13637114.html