143. 重排链表

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
//先将链表存储与线性表里,再重建链表
class Solution {
    public void reorderList(ListNode head) {
        if(head==null)
            return;

        List<ListNode> list = new ArrayList<>();
        ListNode node = head;
        while(node!=null){
            list.add(node);
            node = node.next;
        }

        int i=0;
        int j=list.size()-1;

        while(i<j){
            list.get(i).next = list.get(j);
            i++;

            if(i==j)
                break;
            
            list.get(j).next = list.get(i);
            j--;
        }
        list.get(i).next = null;
    }
}
posted @ 2020-10-20 14:24  _zjk  阅读(40)  评论(0)    收藏  举报