- 链表与顺序表的区别以及应用场景:
- 两者都是线性结构,链表是逻辑上连续,但是物理地址上不一定连续的一种数据结构;而顺序表则是逻辑上连续且物理地址上也连续的一种数据结构(一维数组);
- 对于频繁的插入或者删除建议使用链表这种数据结构,因为顺序表存在一个元素移动的问题,增加时间复杂度;
- 对于索引查找或者定点插入建议使用顺序表,直接可以利用数组下标定位;而链表的每次查找都会进行一次遍历;
- 链表的数据结构
struct ListNode {
int data;
ListNode *next;
ListNode(int x) : data(x), next(NULL) {}
}
ListNode* reverseList(ListNode* head) {
ListNode* pre = NULL;
ListNode* cur = head;
while (cur) {
ListNode* next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
- 从尾到头打印单链表:递归思路(每次打印当前节点前先打印当前节点的下一个节点)、栈的先进后出原则、vector
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> res;
if (head != NULL)
{
res.insert(res.begin(), head->data);
while (head->next != NULL)
{
res.insert(res.begin(), head->next->data);
head = head->next;
}
}
return res;
}