刷题地址 思路 找两个链表的第一个公共结点,可以反过来看,从倒数位的结点往前到第一个公共结点,两个链表的数值应该是一一对应的。所以可以先将链表的数值存储到栈中,实现倒置,然后一一比较倒置后的数值,使用peek(),比较时不对栈顶元素进行出栈操作,比较若相等再执行**pop()**出栈。代码(JAVA) import java.util.Stack; public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1 == null || pHead2 == null) { return null; } Stack<ListNode> stack1 = new Stack<ListNode>(); Stack<ListNode> stack2 = new Stack<ListNode>(); while(pHead1 != null) { stack1.push(pHead1); pHead1 = pHead1.next; } while(pHead2 != null) { stack2.push(pHead2); pHead2 = pHead2.next; } ListNode comNode = null; while(!stack1.isEmpty() && !stack2.isEmpty() && stack1.peek() == stack2.peek()) { //代码参考自某大神,这里peek()和pop()的使用真的太绝了,很巧妙! stack2.pop(); comNode = stack1.pop(); } return comNode; } } 如有错处或者更好的解法,欢迎评论区讨论ovo 感谢