leecode 06从尾到头打印链表
解题思路:用两个指针p 和 q指向头节点
先遍历一遍链表获取链表的大小
创建对应大小的int 类型内存
再重新遍历链表,数组从末尾开始写入
int* reversePrint(struct ListNode* head, int* returnSize) {
struct ListNode* p = head, * q = head;
int size = 0;
while (p)
{
++size;
p = p->next;
}
*returnSize = size;
int* arr = (int*)malloc(sizeof(int)*(*returnSize));
while (q)
{
arr[--size] = q->val;
q = q->next;
}
return arr;
}
leecode 05空格替换
解题思路:首先计算原数组的长度len,要求将空格替换为‘%20’,原来占一个字节,替换后占3个字节,新开辟一个数组来保存替换后的字符,先统计空格的数量 count,新数组长度应该为len + 2 * count,遍历原数组,遇到空格时将‘%’,‘2’,‘0’,分别赋值给 j所指的元素及其后两个元素,并将 j 额外加二,最后给字符串结尾加 ‘\0’
char* replaceSpace(char* s){
int len = strlen(s);
int count = 0;
for(int i = 0;i<len;i++)
{
if(s[i] == ' ')
{
count++;
}
}
int newLen = len + 2 * count;
char *arr = malloc(sizeof(char)*newLen + 1);
for(int i = 0,j = 0;i < len;i++,j++)
{
if(s[i] == ' ')
{
arr[j] = '%';
arr[j+1] = '2';
arr[j+2] = '0';
j = j+2;
}
else
arr[j] = s[i];
}
arr[newLen] = '\0';
return arr;
}