首页 > 代码库 > Java--剑指offer(8)
Java--剑指offer(8)
36.输入两个链表,找出它们的第一个公共结点。
解题思路:这里主要是把两个链表的节点都放入两个栈中,这样就可以按照出栈的方式来比较节点,因为单链表只要是有相同的节点,那么之后的节点也都是一样的,所以如果出栈的节点不相同的话就可以返回之前保存的commonNode变量,这么变量的值就是第一个共同的节点。
import java.util.Stack;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1 == null || pHead2 == null) return null; ListNode commonNode = null; Stack<ListNode> s1 = new Stack<ListNode>(); Stack<ListNode> s2 = new Stack<ListNode>(); s1.push(pHead1); s2.push(pHead2); ListNode p1 = pHead1; ListNode p2 = pHead2; while(p1.next != null){ s1.push(p1.next); p1 = p1.next; } while(p2.next != null){ s2.push(p2.next); p2 = p2.next; } while(s1.peek() == s2.peek()){ commonNode = s1.peek(); if(s1.peek() != null) s1.pop(); if(s2.peek() != null) s2.pop(); //如果s1或者s2为空就直接跳出循环 if(s1.empty() || s2.empty()) break; } return commonNode; }}
37.统计一个数字在排序数组中出现的次数。
public class Solution { public int GetNumberOfK(int [] array , int k) { int len = array.length; int first = -1; int last = -1; int num = 0; for(int i = 0; i < len; i++){ if(array[i] == k){ first = i; break; } } for(int i = len-1; i >= 0; i--){ if(array[i] == k){ last = i; break; } } //如果first和last为-1的话,证明数组中没有和k相同的 if(first != -1 && last != -1){ num = last - first +1; } else{ num = 0; } return num; }}
Java--剑指offer(8)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。