• 【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;
    }

  • 相关阅读:
    函数防抖与函数节流 封装好的debounce和throttle函数
    机顶盒
    getchar() putchar()
    【整】char、varchar、nchar、nvarchar的区别
    主机名
    主机
    java中的匿名内部类总结
    智能路由器又多一个玩家——乐视TV
    乐视开始折腾路由器,小米与极路由还会好过吗?
    带你认识什么是路由器
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4558292.html
Copyright © 2020-2023  润新知