牛客 寻找两个链表的公共结点

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1,ListNode* pHead2) {
         ListNode* p1=pHead1;
         ListNode* p2=pHead2;
        while(p1!=p2)
            {
              p1=(p1==NULL?pHead2:p1->next);
              p2=(p2==NULL?pHead1:p2->next);
        }
      return p1;
    }
   
};

时间: 2024-10-29 19:11:37

牛客 寻找两个链表的公共结点的相关文章

两个链表的公共结点

输入两个链表,找出他们的第一个公共结点. 链表结点定义如下: 1 struct ListNode 2 { 3 int m_nValue; 4 ListNode* m_pNext; 5 } 思想:我们可以先遍历一次得到分别得到两个链表的长度,然后计算得出长度差n,那么让较长的链表先走n步,然后两个链表一起向后走,直到两个指针指向同一个结点.这个结点就是我们要找的 结点.具体代码如下: 1 int GetListLength(ListNode* pHead) 2 { 3 int length = 0

[算法]打印两个链表的公共部分

题目: 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分. 解答: 因为是有序列表,所以从两个链表的头开始进行如下判断: 如果head1的值小于head2,那么head1向下移动. 如果head1的值大于head2,那么head2向下移动. 如果二者的值相等,则打印这个值,然后head1和head2都向下移动. head1和head2有任何一个移动到null,整个过程停止. 程序: public static class Node { public int value; p

链表:判断链表是否带环 、求两个链表的相交结点

问题一:返回两个链表的相交结点1.先分别得到两个链表的长度2.得到长度差,3.先让长链表的头结点走(长度差)步.4.这时.短链表头结点还在原地,两者开始一起走,当得到两者val相等时,这个结点就是公共结点,即相遇结点. 问题二:判断链表是否带环1.定义两个快慢指针,快指针先走两步,慢指针再走一步.直到快慢指针当前结点相同. 如果快指针先为null,则表示没有环,返回null.2.如果带环,让起点和相遇点同时出发.同走一步,再判断相等与否,如果相等退出循坏 返回这个结点 ```public cla

C++算法之 找出两个链表的公共节点

题目:输入两个链表,找出它们第一个公共节点.链表节点定义如下: struct ListNode { int    m_nKey; ListNode*   m_pNext; } 方法1:在第一个链表上顺序遍历每一个节点,没遍历一个节点,在第二个链表上顺序遍历每个节点.  O(n^2) 方法2:找到两个链表的长度差,先遍历长链表到短链表的长度处,然后两个链表同时遍历,没遍历依次比较两个节点指针是否相同, 注意是比较节点指针,不是节点的值! 代码: // FindFirstCommandNode.cp

剑指offer——两个链表的公共节点

题目链接:输入两个链表,找出它们的第一个公共结点. 解题思路: 找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走(因为2个链表用公共的尾部) 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 public class Solution { 11 public ListNode FindFir

剑指offer系列62---两个链表的公共结点

[题目]输入两个链表,找出它们的第一个公共结点. * [思路]1 获取两链表的长度: * 2 让长的链表先走n步后此时走到短链表起始位置: * 3 两链表同时遍历,直至相同,这时返回第一个公共结点. 1 package com.exe11.offer; 2 3 /** 4 * [题目]输入两个链表,找出它们的第一个公共结点. 5 * [思路]1 获取两链表的长度: 6 * 2 让长的链表先走n步后此时走到短链表起始位置: 7 * 3 两链表同时遍历,直至相同,这时返回第一个公共结点. 8 * @

牛客(14)链表中倒数第k个结点

// 题目描述 // 输入一个链表,输出该链表中倒数第k个结点. public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public static ListNode FindKthToTail(ListNode head,int k) { Stack<ListNode> listNodeStack = new Stack<ListNode>();

链表 | 将递增有序的两个链表的公共元素合并为新的链表

王道P38T14 主代码: LinkList common_subList(LinkList &A,LinkList &B){ LNode *C=new LNode,*pC=C; C->next=NULL; LNode* pA=A->next,*pB=B->next; while(pA!=NULL && pB!=NULL){ if(pA->data < pB->data){ pA=pA->next; }else if(pA->

两个链表的第一个公共结点(剑指offer)+链表

两个链表的第一个公共结点 参与人数:1171时间限制:1秒空间限制:32768K 通过比例:31.25% 最佳记录:0 ms|0K(来自  running) 题目描述 输入两个链表,找出它们的第一个公共结点. 链接:http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking