Tìm giao của 2 linked list được sắp xếp

Mọi người xem giúp em hàm sortedIntersect ạ. Em biết em đã xử lý sai cái tail nhưng không biết phải sửa thế nào :frowning:

#include "pch.h"
#include <iostream>
#include <string>
#include <stack>
using namespace std; 
class SinglyLinkedListNode {
public:
	int data;
	SinglyLinkedListNode *next;

	SinglyLinkedListNode(int node_data) {
		this->data = node_data;
		this->next = nullptr;
	}
};

class SinglyLinkedList {
public:
	SinglyLinkedListNode *head;
	SinglyLinkedListNode *tail;

	SinglyLinkedList() {
		this->head = nullptr;
		this->tail = nullptr;
	}

	void insert_node(int node_data) {
		SinglyLinkedListNode* node = new SinglyLinkedListNode(node_data);

		if (!this->head) {
			this->head = node;
		}
		else {
			this->tail->next = node;
		}

		this->tail = node;
	}
};

void print_singly_linked_list(SinglyLinkedListNode* node, string sep) {
	while (node) {
		cout << node->data;
		node = node->next;
		if (node) {
			cout << sep;
		}
	}
}
SinglyLinkedListNode * sortedIntersect(SinglyLinkedListNode	*a, SinglyLinkedListNode *b)
{	
	SinglyLinkedList *result = new SinglyLinkedList();
	SinglyLinkedListNode *temp1 = a, *temp2 = b;
	SinglyLinkedListNode *tail=result->head;
	
	while (temp1 && temp2)
	{
		if (temp1->data == temp2->data)
		{
			result->insert_node(temp1->data);
			tail = tail->next;
			tail->next = NULL;
			temp1 = temp1->next;
			temp2 = temp2->next;
		}
		else if (temp1->data < temp2->data)
		{
			temp1 = temp1->next;
		}
		else temp2 = temp2->next;
	}
	return result->head;


	
}

int main()
{
	SinglyLinkedList *llist = new SinglyLinkedList(), *llist2 = new SinglyLinkedList();
	llist->insert_node(1);
	llist->insert_node(2);
	llist->insert_node(5);
	llist->insert_node(8);
	llist2->insert_node(3);
	llist2->insert_node(4);
	llist2->insert_node(5);
	llist2->insert_node(8);
	sortedIntersect(llist->head, llist2->head);
	return 0;
}
SinglyLinkedListNode * sortedIntersect(SinglyLinkedListNode	*a, SinglyLinkedListNode *b)
{	
	SinglyLinkedListNode *result, *result1 = null;
	while(a != null && b !=null){
		if (a->data < b->data) {
			while(a != null){
				while(b! = null){
					if(a->data > b->data) {
						break;
					}
					if (a->data == b->data){
						SinglyLinkedListNode *t = new SinglyLinkedListNode();
						t->data=a->data;
						t->next=null;
						if(result == null){
							result = t;
							result1 = result;
						} else {
							result->next=t;
							result=result->next;
						}
					}
					b=b->next;
				}
				a=a->next;
			}
		} else {
			while(b != null){
				while(a! = null){
					if(b->data > a->data) {
						break;
					}
					if (b->data == a->data){
						SinglyLinkedListNode *t = new SinglyLinkedListNode();
						t->data=b->data;
						t->next=null;
						if(result == null){
							result = t;
							result1 = result;
						} else {
							result->next=t;
							result=result->next;
						}
					}
					a=a->next;
				}
				b=b->next;
			}
		}
	}
	return result1;
}
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?