213、重排链表

寵の児 提交于 2019-11-27 13:08:45

题目描述:
给定一个单链表 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.

emm,硬生生的放入list然后遍历

class Solution {
    public void reorderList(ListNode head) {
        List<ListNode> list = new ArrayList<>();
		 ListNode tem = head;
		 while (tem != null) {
			list.add(tem);
			tem = tem.next;
		}
		int start = 0;
		int end = list.size() - 1;
		ListNode temnode = null;
        if(list.size() == 0){
			return ;
		}
		 while (start < end ) {
			ListNode tem1 = list.get(start ++);
			ListNode tem2 = list.get(end --);
			if(temnode == null){
				temnode = tem2;
			}else {
				temnode.next = tem1;
				temnode = tem2;
			}
			tem1.next = tem2;
            tem2.next = null;
		}		
        int size = list.size();
       if((size & 1)  == 1 && size != 1){
			 ListNode nod = list.get(start);
			 nod.next = null;
			 temnode.next = nod;
		 }
    }
}

效率肯定很低,但是完成了
跟着别人的思路进行一遍
在这里插入图片描述

class Solution {
   public void reorderList(ListNode head) {
		if(head == null || head.next == null){
			return ;
		}
		 ListNode fast = head;
		 ListNode slow = head;
		 while (fast != null && fast.next != null &&  fast.next.next != null ) {
			slow = slow.next;
			fast = fast.next.next;
		} 	
//	fast在这里就表示第二段的开始节点
		 fast = slow.next;
//		 反转第二段的节点
		 fast = reverse(fast);
		 slow.next = null;
//		 slow表示的是第一段的开始节点
		 slow = head;
       while (slow != null && fast != null) {
			ListNode tem1 = slow.next;
			ListNode tem2 = fast.next;
			slow.next = fast;
			fast.next = tem1;
			slow = tem1;
			fast = tem2;
		}
	 }
    public ListNode reverse(ListNode root){
		if(root == null){
			return null;
		}
		ListNode node = root;
		ListNode pre = null;
		while (node.next != null) {
			ListNode temNode = node.next;
			node.next = pre;
			pre = node;
			node = temNode;
        }
        node.next = pre;
		return node;
	}
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!