题目描述
看好像没有c语言的题解写一个
样例
int* printListReversingly(struct ListNode* head) {
if(head == NULL) return NULL;//如果这个链表是空的就返回空
int count = 0;//记录个数
struct ListNode * b = head;//让b来遍历链表,应为这是单链表head丢了就没法完了
//记录有多少个数
while(b -> next != NULL) {
count++;
b = b -> next;
}
//开count个空间。应为count长度要比链表实际长度少1个数所以加1,可以带入 2 3 5 自己推一下
int* arr=(int*)malloc(sizeof(int) * count + 1);
b = head;//重新让b指向head
while(b -> next != NULL) {//重新遍历链表
arr[count--] = b -> val;//应为count已经确定了链表多长所以可以用来当数组的下标
b = b -> next;
}
arr[count] = b -> val;//这个和上面的count一样会少写一个,可以带入 2 3 5 自己推一下
return arr;//返回
}
//可ac
b = head;
while (b->next != NULL) {
arr[count–] = b->val;
b = b->next;
}
第一次循环时b是头结点,可是头结点不是不存储数据吗
我也是这么想的所以,是不是博主写错了
你好关于你们的问题我去看了一下。数据显示是从头结点开始的,至于头结点不存储数据其实是为了方便之后的一些操作,但是你要是能够理解链表的创建和操作流程其实头结点存不存储数据都无所谓
你好关于你们的问题我去看了一下。数据显示是从头结点开始的,至于头结点不存储数据其实是为了方便之后的一些操作,但是你要是能够理解链表的创建和操作流程其实头结点存不存储数据都无所谓
谢谢,很有帮助
稍微改了一点点:
int printListReversingly(struct ListNode head) {
if(head==NULL) return NULL;
int count=0;
struct ListNode p=head;
while(p!=NULL){
count ++;
p=p->next;
}
int arr=(int )malloc(sizeof(int)count);
p=head;
while(p!=NULL){
arr[–count]=p->val;
p=p->next;
}
return arr;
}
你好,我想问一下统计count个数不用while(b!= NULL) {
count++;
b = b -> next;
}
写的很详细,谢谢