考察点:链表
public class OddIncreaseEvenDecrease { public static Node[] getLists(Node head){ Node head1 = null; Node head2 = null; Node cur1 = null; Node cur2 = null; int count = 1;//用来计数 while(head != null){ if(count % 2 == 1){ if(cur1 != null){ cur1.next = head; cur1 = cur1.next; }else{ cur1 = head; head1 = cur1; } }else{ if(cur2 != null){ cur2.next = head; cur2 = cur2.next; }else{ cur2 = head; head2 = cur2; } } head = head.next; count++; } //跳出循环,要让最后两个末尾元素的下一个都指向null cur1.next = null; cur2.next = null; Node[] nodes = new Node[]{head1,head2}; return nodes; } public static Node reverseList(Node head){ Node pre = null; Node next = null; while(head != null){ next = head.next; head.next = pre; pre = head; head = next; } return pre; } public static Node CombineList(Node head1,Node head2){ if(head1 == null || head2 == null){ return head1 != null ? head1 :head2; } Node head = head1.value < head2.value ?head1 : head2; Node cur1 = head == head1 ? head1 :head2; Node cur2 = head == head1 ? head2 :head1; Node pre = null; Node next = null; while(cur1 != null && cur2 !=null){ if(cur1.value <= cur2.value){//这里一定要有=,否则一旦cur1的value和cur2的value相等的话,下面的pre.next会出现空指针异常 pre = cur1; cur1 = cur1.next; }else{ next = cur2.next; pre.next = cur2; cur2.next = cur1; pre = cur2; cur2 = next; } } pre.next = cur1 == null ? cur2 : cur1; return head; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)