几道链表的题目

来源:互联网 发布:买家淘宝退货率 编辑:程序博客网 时间:2024/06/06 06:44

两个链表相加成一个链表

public int Node{public int value;public Node next;public Node(int data){this.value = data;}}public Node addList1(Node head1,Node head2){Stack<Integer> s1 = new Stack<Integer>();Stack<Integer> s2 = new Stack<Integer>();while(head1 != null){s1.push(head1.value);head1 = head1.next;}while(head2 != null){s2.push(head2.value);head2 = head2.next;}int ca = 0;int n1 = 0;int n2 = 0;int n = 0;Node node = null;Node pre = null;while(!s1.isEmpty() || !s2.isEmpty()){n1 = s1.isEmpty()?0:s1.pop();n2 = s2.isEmpty()?0:s2.pop();n = n1 + n2 + ca;pre = node;node = new Node(n%10);node.next = pre;ca = n/10;}if(ca == 1){pre = node;node = new Node(1);node.next = pre;}return node;}//利用链表的逆序求解,省掉栈空间public Node addList2(Node head1,Node head2){head1 = reverseList(head1);head2 = reverseList(head2);int ca = 0;int n1 = 0;int n2 = 0;int n = 0;Node c1 = head1;Node c2 = head2;Node node = null;Node pre = null;while(c1!=null ||c2!=null){n1 = c1!=null?c1.value:0;n2 = c2!=null?c2.value:0;n = n1 + n2 + ca;pre = node;node = new Node(n%10);node.next = pre;ca = n/10;n1 = c1!=null?c1.next:null;n2 = c2!=null?c2.next:null;}if(ca == 1){pre = node;node = new Node(1);node.next = pre;}reverList(head1);reverList(head2);return node;}

二叉搜索树转换成双向链表

//将二叉树转换成双向链表,先将二叉树转换成中序入队列,//然后弹出元素,转成双向链表public Node convert1(Node head){Queue<Node> queue = new LinkedList<Node>();inOrderToQueue(head,queue);if(queue.isEmpty()){return head;}head = queue.poll();Node pre = head;pre.left = null;Node cur = null;while(!queue.isEmpty()){cur = queue.poll();pre.right = cur;cur.left = pre;pre = cur;}pre.right = null;return head;}public void inOrderToQueue(Node head,Queue<Node> queue){ if(head == null){ return; } inOrderToQueue(head.left,queue); queue.offer(head); inOrderToQueue(head.right,queue);}


0 0