1. 编程前先用if将不合格的输入输出false
2.Listnode相关知识学习
链表的数据结构
/**
* 单向链表节点结构体
* 备注:这是链表最基本的数据结构,包含数据域和指针域
*/
struct ListNode {
int val; // 数据域:存储节点值
ListNode *next; // 指针域:指向下一个节点
// 默认构造函数
ListNode() : val(0), next(nullptr) {}
// 带值构造函数
ListNode(int x) : val(x), next(nullptr) {}
// 带值和下一个节点指针的构造函数
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
/**
* 双向链表节点结构体
* 备注:相比单向链表,多了一个指向前驱节点的指针,可以双向遍历
*/
struct DoublyListNode {
int val;
DoublyListNode *prev; // 指向前一个节点
DoublyListNode *next; // 指向下一个节点
DoublyListNode() : val(0), prev(nullptr), next(nullptr) {}
DoublyListNode(int x) : val(x), prev(nullptr), next(nullptr) {}
};
创建结点
// 创建三个节点的链表:1 -> 2 -> 3
ListNode* head = new ListNode(1); // 第一个节点,值为1
head->next = new ListNode(2); // 第二个节点,值为2
head->next->next = new ListNode(3); // 第三个节点,值为3
// 可视化表示:
// head → [val=1, next] → [val=2, next] → [val=3, next=nullptr]
创建链表
/**
* 手动创建链表
* 备注:适合创建固定的小链表,直观但扩展性差
*/
ListNode* createLinkedList() {
ListNode* head = new ListNode(1); // 创建头节点
head->next = new ListNode(2); // 创建第二个节点
head->next->next = new ListNode(3); // 创建第三个节点
head->next->next->next = new ListNode(4); // 创建第四个节点
return head;
}
/**
* 从整型数组动态建造链表
*/
ListNode* createFromArray(int arr[], int size) {
if (size == 0) return nullptr;
ListNode* head = new ListNode(arr[0]);
ListNode* current = head;
for (int i = 1; i < size; i++) {
current->next = new ListNode(arr[i]);
current = current->next;
}
return head;
}
void arrayExample() {
int numbers[] = {1, 3, 5, 7, 9};
int size = sizeof(numbers) / sizeof(numbers[0]);
ListNode* head = createFromArray(numbers, size);
// 链表: 1->3->5->7->9
}
#include <vector>
/**
* 从vector动态建造链表
*/
ListNode* createFromVector(const vector<int>& vec) {
if (vec.empty()) return nullptr;
ListNode* head = new ListNode(vec[0]);
ListNode* current = head;
for (size_t i = 1; i < vec.size(); i++) {
current->next = new ListNode(vec[i]);
current = current->next;
}
return head;
}
void vectorExample() {
vector<int> data = {2, 4, 6, 8, 10};
ListNode* head = createFromVector(data);
// 链表: 2->4->6->8->10
}
三元运算:?
检查指针是否为空,再访问val
int n1 = l1 ? l1->val : 0;
浙公网安备 33010602011771号