创建
翻转
环
统计
相加
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));
}