本文主要是介绍LeetCode:143.重排链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
143. 重排链表
解题过程
/*** 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;}ListNode mid = middleNode(head);ListNode l1 = head;ListNode l2 = mid.next;mid.next = null;l2 = reverse(l2);merge(l1,l2);}// 找中点public ListNode middleNode(ListNode head){ListNode slow = head;ListNode fast = 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;ListNode cur = head;while(cur != null){ListNode temp = cur.next;cur.next = pre;pre = cur;cur = temp;}return pre;}// 链表两端合并public void merge(ListNode l1, ListNode l2){ListNode temp1;ListNode temp2;while(l1 != null && l2 != null){temp1 = l1.next;temp2 = l2.next;l1.next = l2;l1 = temp1;l2.next = l1;l2 = temp2;}}
}
这篇关于LeetCode:143.重排链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!