例1
输入:
{
1,2,3,4}
返回值:
{
1,4,2,3}
说明:
给定head链表1->2->3->4, 重新排列为 1->4->2->3,会取head链表里面的值打印输出 1
例 2
输入:
{
1,2,3,4,5}
返回值:
{
1,5,2,4,3}
说明:
给定head链表1->2->3->4->5, 重新排列为 1->5>2->4->3,会取head链表里面的值打印输出
リンク リストは配列のように直接アクセスできないため、データにアクセスするたびに最初からアクセスする必要があり、時間がかかります。
方法 1 : 線形リスト: ArrayList の最下層は配列で実装されており、リンクされたリスト内のすべてのノードを ArrayList に配置し、2 つのポインターを使用してノードを文字列化できます。
public void reorderList(ListNode head){
if(head == null)return;
ArrayList<ListNode> arrayList=new ArrayList<>();
//把链表中的节点录入ArrayList
while(head.next != null){
arrayList.add(head);
}
//定义两个指针
int i=0,j=arrayList.size()-1;
//将节点串起来
while(i>j){
if(i==j)return;
arrayList.get(i).next=arrayList.get(j);
i++;
arrayList.get(j).next=arrayList.get(i);
j++;
}
//把最后一个节点指向null
arrayList.get(i).next=null;
}
方法2:转换为两个链表