Java与算法(8)
来源:互联网 发布:mac spaces 编辑:程序博客网 时间:2024/05/21 16:58
Java与算法(8)
1.按照左右半区的方式重新组合单链表
链表长度为N,N为偶数,前N/2个节点为左半区,后N/2个节点为右半区
N为奇数,前N/2个节点为左半区,后N/2+1为右半区
public class MergeLR {public static class Node {int data;Node next;public Node(int data) {this.data = data;}}public void printLink(Node head) {while (head!=null) {System.out.println(head.data+" ");head=head.next;}System.out.println();}public void relocate(Node head) {Node mid = head;Node right = head.next;while (right.next!=null && right.next.next !=null) {mid = mid.next;right = right.next.next;}right= mid.next;mid.next = null;merge(head, right);}public void merge(Node left,Node right) {Node next = null;while (left.next!=null) {next = right.next;right.next = left.next;left.next = right;left = right.next;right = next;}left.next = right;}public static void main(String[] args) {Node node1 = new Node(1);node1.next = new Node(2);node1.next.next = new Node(3);node1.next.next.next = new Node(4);node1.next.next.next.next = new Node(5);node1.next.next.next.next.next = new Node(6);MergeLR lr = new MergeLR();lr.relocate(node1);lr.printLink(node1);}}
2.合并两个有序单链表
public class MergeNode {public static class Node {int data;Node next;public Node(int data) {this.data = data;}}public void printLink(Node head) {while (head!=null) {System.out.println(head.data+" ");head=head.next;}System.out.println();}public Node merge(Node head1 ,Node head2) {Node head = head1.data<head2.data?head1:head2;Node cur1 = head == head1?head1:head2;Node cur2 = head==head1?head2:head1;Node pre = null;Node next = null;while (cur1.next!=null && cur2.next!=null) {if (cur1.data<=cur2.data) {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;}public static void main(String[] args) {Node node1 = new Node(1);node1.next = new Node(3);node1.next.next = new Node(7);node1.next.next.next = new Node(15);Node node2 = new Node(2);node2.next = new Node(3);MergeNode mergeNode = new MergeNode();Node node = mergeNode.merge(node1, node2);mergeNode.printLink(node);}}
3.给出一个节点,但不给定头节点来删除给定节点
public class DeleteNode {public static class Node {int data;Node next;public Node(int data) {this.data = data;}}public void printLink(Node head) {while (head!=null) {System.out.println(head.data+" ");head=head.next;}System.out.println();}public void delete(Node node) {Node next = node.next;if (next==null) {throw new RuntimeException("can not delete");}node.data = next.data;node.next = next.next;}public static void main(String[] args) {Node node1 = new Node(1);node1.next = new Node(9);node1.next.next = new Node(3);node1.next.next.next = new Node(15);node1.next.next.next.next = new Node(4);node1.next.next.next.next.next = new Node(2);node1.next.next.next.next.next.next = new Node(0);DeleteNode deleteNode = new DeleteNode();deleteNode.printLink(node1);deleteNode.delete(node1.next.next);System.out.println("---");deleteNode.printLink(node1);}}
阅读全文
0 0
- Java与算法(8)
- Java与算法(1)
- Java与算法(2)
- Java与算法(3)
- Java与算法(4)
- Java与算法(5)
- Java与算法(6)
- Java与算法(7)
- Java与算法(9)
- Java与算法(10)
- Java与算法(11)
- Java与算法(12)
- Java与算法(13)
- 数据结构与算法(8)---Java语言实现:插入排序
- Java与算法之(8) - 堆排序
- FIFO与LRU 算法实现(java)
- 数据结构与算法分析(JAVA版)
- java算法心得与技巧(一)
- 类加载器
- 团队管理者需要做到的事
- leetcode:4. Median of Two Sorted Arrays(Java实现)
- 算法导论--二叉树
- 安卓猜数字小游戏1
- Java与算法(8)
- 浅谈JSOON
- linux命令笔记
- Android笔记三:Android 接口定义语言 (AIDL)--Binder工作原理分析
- 反射
- 判断两个二叉树是否相等(函数)
- 使用Spring Profile和Mybatis进行多个数据源(H2和Mysql)的切换
- 210. Course Schedule II(DFS)
- Can't create table 'qqapp.#sql-2f7c_1e' (errno: 150)