首页 > 代码库 > 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)