题目描述:

给定一个单链表 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是动态的,可以被任意指定类型。

posted on 2021-03-26 16:08  wxcongajiayou  阅读(57)  评论(0)    收藏  举报