leetcode中等143重排链表
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等143重排链表相关的知识,希望对你有一定的参考价值。
给定一个单链表 L 的头节点 head ,单链表 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)
//1、返回中点(偏前)
ListNode mid=split(head);
ListNode l1=head;
ListNode l2=mid.next;
mid.next=null;
//2、反转l2
l2=reverse(l2);
//3、合并
merge(l1,l2);
public ListNode split(ListNode head)
ListNode fast=head,slow=head;
while(fast.next!=null&&fast.next.next!=null)
slow=slow.next;
fast=fast.next.next;
return slow;
public ListNode reverse(ListNode head)
ListNode pre=null,cur=head;
while(cur!=null)
ListNode next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
return pre;
public void merge(ListNode l1,ListNode l2)
ListNode t1,t2;
while(l1!=null&&l2!=null)
t1=l1.next;
t2=l2.next;
l1.next=l2;
l1=t1;
l2.next=l1;
l2=t2;
以上是关于leetcode中等143重排链表的主要内容,如果未能解决你的问题,请参考以下文章