题目描述:
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
给定链表 1->2->3->4, 重新排列为 1->4->2->3.
示例 2:
给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.
解题思路:
创建线性表存储链表,利用线性表的随机访问的特性来按照顺序重建链表
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode() {} 7 * ListNode(int val) { this.val = val; } 8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; } 9 * } 10 */ 11 class Solution { 12 public void reorderList(ListNode head) { 13 if(head==null){ 14 return; 15 } 16 List<ListNode> list=new ArrayList<ListNode>(); 17 ListNode node=head; 18 while(node!=null){ 19 list.add(node); 20 node=node.next; 21 } 22 int i=0; 23 int j=list.size()-1; 24 while(i<j){ 25 list.get(i).next=list.get(j); 26 i++; 27 if(i==j){ 28 break; 29 } 30 list.get(j).next=list.get(i); 31 j--; 32 } 33 list.get(i).next=null; 34 } 35 }
泛型可以用"<T>"代表,任意类型的。
解释: “<T>”是泛型的默认值,可以被任意类型所代替,如:
List<String> list = new ArayList<String>();这个就定义了一个String类型的”泛型“集合,那么T的类型就是字符串。
List<T> list = new ArayList<T>();
可以赋值给list:list.add("StringBatch");
可以获取到list的值:list.get(0),结果就是”StringBatch“;
这个时候T的类型也是String。也就是说T是动态的,可以被任意指定类型。
浙公网安备 33010602011771号