反转链表

54 阅读1分钟
/**
 * 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
 */
public class ReverseList {

    /**
     * 题解:
     * 1. 判断当前head节点是否为null;
     *  1.1 如果不为null,则首先获取一下head.next;(后续需要head = nexit,保证全部遍历一遍)
     *  1.2 将当前head插入到ret和ret.next之间即可;
     * 2. return ret的next.
     * @param head
     * @return
     */
    public ListNode reverseList(ListNode head) {
        ListNode ret = new ListNode();
        while (head != null) {
            ListNode next = head.next;
            head.next = ret.next;
            ret.next = head;
            head = next;
        }
        return ret.next;
    }

    private class ListNode {
        ListNode next;
    }

    @Test
    public void test1() {
        ListNode h1 = new ListNode();
        ListNode h2 = new ListNode();
        ListNode h3 = new ListNode();
        ListNode h4 = new ListNode();
        ListNode h5 = new ListNode();
        h1.next = h2;
        h2.next = h3;
        h3.next = h4;
        h4.next = h5;
        reverseList(h1);
    }
}