zoukankan      html  css  js  c++  java
  • 【leetcode】【单链表】【160】Intersection of Two Linked Lists

    #include<iostream>
    using namespace std;
    
    struct ListNode {
    	int val;
    	ListNode *next;
    	ListNode(int x) : val(x), next(NULL) {}
    };
    
    class Solution {
    public:
    	ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    		if (headA == NULL || headB == NULL)
    			return NULL;
    
    		int numOfNodeA = 0; //链表A的长度
    		int numOfNodeB = 0;//链表B的长度
    		ListNode* curA = headA;
    		ListNode* curB = headB;
    		while (curA){
    			++numOfNodeA;
    			curA = curA->next;
    		}
    		while (curB){
    			++numOfNodeB;
    			curB = curB->next;
    		}
    		int num = numOfNodeA - numOfNodeB;//两链表长度差
    		curA = headA;
    		curB = headB;
    		if (num > 0){ //链表A比B长
    			while (num-- > 0)
    				curA = curA->next;
    		}else{//链表A不比B长
    			num = -num;
    			while (num-- > 0)
    				curB = curB->next;
    		}
    		while (curA&&curB){
    			if (curA == curB)
    				return curA;
    			else{
    				curA = curA->next;
    				curB = curB->next;
    			}
    		}
    		return NULL;
    	}
    	ListNode* createList(ListNode* head){
    		int numOfNode;
    		int value;
    		cout << "please input number of listNode:";
    		cin >> numOfNode;
    		cin >> value;
    		head = new ListNode(value);
    		ListNode* cur = head;
    		for (int i = 1; i < numOfNode; ++i){
    			cin >> value;
    			ListNode* temp = new ListNode(value);
    			cur->next = temp;
    			cur = temp;
    		}
    		//cur->next = head;
    		return head;
    	}
    	void printNode(ListNode* head){
    		ListNode* cur = head;
    		while (cur){
    			cout << cur->val << " ";
    			cur = cur->next;
    		}
    		cout << endl;
    	}
    };
    
    int main(){
    	ListNode* headA = NULL;
    	ListNode* headB = NULL;
    	Solution solution;
    	headA = solution.createList(headA);
    	solution.printNode(headA);
    
    	headB = solution.createList(headB);
    	solution.printNode(headB);
    
    	ListNode* begin = solution.getIntersectionNode(headA, headB);
    
    	cout << (begin==NULL?0:begin->val) << endl;
    
    	system("pause");
    	return 0;
    }

  • 相关阅读:
    Scala学习十二——高阶函数
    Scala学习十一——操作符
    Scala学习十——特质
    Scala学习九——文件和正则表达式
    Scala学习八——继承
    Scala学习七——包和引入
    Scala学习六——对象
    Scala学习五——类
    Scala学习四——映射和数组
    Spark Broadcast内幕解密:Broadcast运行机制彻底解密、Broadcast源码解析、Broadcast最佳实践
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4558292.html
Copyright © 2011-2022 走看看