Skip to content

创建

翻转

统计

相加

ba08a5e4bdbe013022e44b19bf8567a

c++
#include <iostream>

typedef struct node
{
    int data;
    struct node *next;
} Node;

class LinkList
{
public:
    Node *head;
    Node *tail;
    LinkList()
    {
        head = (Node *)malloc(sizeof(Node));
        head->data = -1;
        head->next = NULL;
        tail = head;
    }

    void append(int data)
    {
        Node *newNode = (Node *)malloc(sizeof(Node));
        newNode->data = data;
        newNode->next = NULL;
        tail->next = newNode;
        tail = newNode;
    }

    void printList()
    {
        Node *current = head->next;
        while (current != NULL)
        {
            std::cout << current->data << "->";
            current = current->next;
        }
        std::cout << "NULL" << std::endl;
    }
};

void printList(Node *p)
{
    Node *current = p->next;
    while (current != NULL)
    {
        std::cout << current->data << "->";
        current = current->next;
    }
    std::cout << "NULL" << std::endl;
}

Node *addInt(Node *p, Node *q)
{
    Node *pNode = p->next;
    Node *qNode = q->next;
    LinkList result;

    while (pNode != NULL && qNode != NULL)
    {
        result.append(pNode->data + qNode->data);
        pNode = pNode->next;
        qNode = qNode->next;
    }
    if (pNode != NULL && qNode == NULL)
    {
        while (pNode != NULL)
        {
            result.append(pNode->data);
            pNode = pNode->next;
        }
    }
    if (qNode != NULL && pNode == NULL)
    {
        while (qNode != NULL)
        {
            result.append(qNode->data);
            qNode = qNode->next;
        }
    }
    return result.head;
}

Node *addInt2(Node *p, Node *q)
{
    Node *pNode = p->next;
    Node *qNode = q->next;

    // 创建新链表
    Node *myHead = (Node *)malloc(sizeof(Node));
    Node *myTail = (Node *)malloc(sizeof(Node));
    myHead->data = -1;
    myHead->next = NULL;
    myTail = myHead;

    while (pNode != NULL && qNode != NULL)
    {
        // 新节点尾差
        Node *newNode = (Node *)malloc(sizeof(Node));
        newNode->data = pNode->data + qNode->data;
        newNode->next = NULL;
        myTail->next = newNode;
        myTail = newNode;

        pNode = pNode->next;
        qNode = qNode->next;
    }
    while (pNode != NULL)
    {
        Node *newNode1 = (Node *)malloc(sizeof(Node));
        newNode1->data = pNode->data;
        newNode1->next = NULL;
        myTail->next = newNode1;
        myTail = newNode1;
        pNode = pNode->next;
    }
    while (qNode != NULL)
    {
        Node *newNode2 = (Node *)malloc(sizeof(Node));
        newNode2->data = qNode->data;
        newNode2->next = NULL;
        myTail->next = newNode2;
        myTail = newNode2;
        qNode = qNode->next;
    }
    return myHead;
}

int main()
{
    LinkList list1;
    LinkList list2;
    list1.append(11);
    list1.append(2233);
    list1.append(4455);

    list2.append(11);
    list2.append(2233);
    list2.append(4455);
    list2.append(6677);

    printList(addInt(list1.head, list2.head));
    printList(addInt2(list1.head, list2.head));
}