创建2个字符串C++的链表

创建2个字符串C++的链表,c++,string,linked-list,C++,String,Linked List,我试着自学链表,根据字母表中的第一个字符串,用两个字符串制作链表。然后,函数将返回一个指向按字母顺序排序的2个字符串列表的指针。我不知道为什么,但是我下面的代码没有达到我期望的效果。如果有人能看看我的代码,让我知道为什么这不起作用,我会非常感激 struct Node{ string val; Node* next; }; Node* makePairList (string s1, string s2) { Node* h = NULL; Node* n =

我试着自学链表,根据字母表中的第一个字符串,用两个字符串制作链表。然后,函数将返回一个指向按字母顺序排序的2个字符串列表的指针。我不知道为什么,但是我下面的代码没有达到我期望的效果。如果有人能看看我的代码,让我知道为什么这不起作用,我会非常感激

struct Node{
    string val;
    Node* next;
};

Node* makePairList (string s1, string s2) {
    Node* h = NULL;
    Node* n = NULL;
    Node* t = NULL;

    if(s1 > s2)
    {
        n = new Node();
        n->val = s1;
        t=n;
        h=n;

        n= new Node();
        n -> val = s2;
        n-> next = NULL;
        t -> next = n;
        t=n;
    }
    else
    {
        n = new Node();
        n->val = s2;
        t=n;
        h=n;

        n= new Node();
        n -> val = s1;
        n->next = NULL;
        t -> next = n;
        t=n;
    }

    return h;
}

你怎么知道这不起作用呢?试一试,发现makePairListabc,def;其工作原理是创建一个包含两个节点的链表,第一个节点的值为def,第二个节点的值为abc。abc和def的交换是问题吗?我建议重新组织您的功能,因为您在这两种情况下的操作几乎相同。首先创建两个节点结构h=新节点;t=新节点;h->next=t;t->next=NULL;然后根据两个节点的条件设置值字段。这将简化和减少您的代码。如果s1val=s1;t->val=s2;}或者{h->val=s2;t->val=s1;}一个常见的技巧是在参数最初的顺序错误时调用makePairLists2,s1。或者调用std::swaps1,s2。我可以分析这个函数,它创建两个Node类型的动态对象,一个值包含一个字符串,另一个值包含另一个字符串,其中第一个元素指向第二个元素,第一个元素的val小于第二个元素中的val。第一个节点对象作为指针返回。如果此函数应该执行其他操作,请解释。