wordpress多站点会员注册,如何跳过网站会员,上海工商网,彩票网站建设策划书目录
题目要求
手搓一个简易链表
代码实现 题目要求
给你单链表的头节点 head #xff0c;请你反转链表#xff0c;并返回反转后的链表 手搓一个简易链表
代码演示#xff1a;
struct ListNode* n1 (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n1);…目录
题目要求
手搓一个简易链表
代码实现 题目要求
给你单链表的头节点 head 请你反转链表并返回反转后的链表 手搓一个简易链表
代码演示
struct ListNode* n1 (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n1);
struct ListNode* n2 (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n2);
struct ListNode* n3 (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n3);
struct ListNode* n4 (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n4);
struct ListNode* n5 (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n5);n1-val 1;
n2-val 3;
n3-val 5;
n4-val 7;
n5-val 9;n1-next n2;
n2-next n3;
n3-next n4;
n4-next n5;
n5-next NULL; 代码实现
代码演示
struct ListNode* reverseList(struct ListNode* head)
{if (head NULL)return NULL;struct ListNode* prev NULL;struct ListNode* cur head;struct ListNode* next cur-next;while (cur ! NULL){cur-next prev;// 迭代prev cur;cur next;if(next ! NULL)next next-next;}return prev;
}
代码解析
代码思路改变节点的指向将单链表的第一个节点的 next 指向 NULL第二个节点的 next 指向第一个节点第三个节点的 next 指向第二个节点…………以此类推就完成了链表的反转
代码逻辑利用一前prev一后next一中间cur 3 个节点指针进行迭代将 cur 的 next 指向 prev再依次往后赋值需要注意的是 next 赋值为下一个节点的时候要先判断 next 是否为空再赋值且结束的条件是中间节点为空中间节点为空时就表示链表反转到位最后再返回 prev 节点指针就是新的头节点指针
代码验证
代码的时间复杂度和空间复杂度
while 循环执行了 N 次每次内部是常数次且没有开辟额外的空间得出
算法的时间复杂度大O渐进表示法O(N)
算法的空间复杂度大O渐进表示法O(1)