LeetCode Java刷题笔记—328. 奇偶链表
给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。
中等难度。首先将链表进行拆分,同时保存一个当前节点的前驱节点的引用pre,并且使用一个flag标识位,来表示最后的节点是属于奇链表还是偶链表。
如果flag为false,表示最后的节点属于偶链表,那么就用前驱节点pre链接偶链表的头节点;如果flag为true,表示最后的节点属于奇链表,那么就用最后的节点head链接偶链表的头节点。
public ListNode oddEvenList( ListNode head ){ if( head == null || head.next == null ){ return head; } //odd,奇链表头部节点;even,偶链表头部节点;pre,前驱节点 ListNode odd = head, even = head.next, pre = null; //flag表示最后的节点是属于奇链表还是偶链表 boolean flag = true; while( head.next != null ){ flag = !flag; ListNode next = head.next; head.next = next.next; pre = head; head = next; } //如果flag为false,表示最后的节点属于偶链表,那么就用前驱节点pre链接偶链表的头节点 //如果flag为true,表示最后的节点属于奇链表,那么就用最后的节点head链接偶链表的头节点 if( !flag ){ pre.next = even; } else{ head.next = even; } //返回奇链表的头节点 return odd; }
上一篇:
IDEA上Java项目控制台中文乱码