【數據結構】-單鏈表-求兩個單鏈表的公共節點

typedef struct LNode{
	int data;
	struct LNode *next;
}LNode, *LinkList;
/*鏈表*/

LinkList List_TailInsert(LinkList L) {
	int x;
	L = (LinkList)malloc(sizeof(LNode));
	L->next = NULL;
	LNode *s, *r = L;
	cout << "尾插法創建單鏈表:";
	while (true) {
		cin >> x;
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		r->next = s;
		r = s;
		if (cin.get() == '\n')break;
	}
	r->next = NULL;
	return L;
}

void List_Print(LinkList L) {
	LNode *p;
	p = L->next;
	while (p) {
		cout << p->data << " ";
		p = p->next;
	}
	cout << endl;
}

int List_Length(LinkList L) {
	int L_length = 0;
	LNode *p=L->next;
	while (p) {
		L_length++;
		p = p->next;
	}
	return L_length;
}

LinkList findCom(LinkList L, LinkList N) {
	int L_length=0,N_length = 0,pos= 0;
	LNode *longer, *shorter;
	L_length = List_Length(L);
	N_length = List_Length(N);

	if (L_length > N_length) {
		pos = L_length - N_length;
		longer = L->next;
		shorter = N->next;
	}
	else {
		pos = N_length - L_length;
		longer = N->next;
		shorter = L->next;
	}
	while (pos--)longer = longer->next;

	while (longer&&shorter)
	{
		
		if (longer->data == shorter->data)return longer;
		longer = longer->next;
		shorter = shorter->next;
	}
	cout << "沒有公共節點";
	return NULL;	
}


 int main() {
	LinkList L = NULL;
	LinkList N = NULL;
	L = List_TailInsert(L);
	N = List_TailInsert(N);

	L=findCom(L, N);
	while (L)
	{
		cout << L->data << " ";
		L=L->next;
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章