206.反转链表
1. 题目描述2. 一些理解3.代码如下
原题目连接
1. 题目描述
反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
2. 一些理解
//一个刷题以来一直碰到的问题: 就是很容易complier就会报错:“member access within null pointer of type ‘struct list’” 说白了就是,我们知道这个结点为null,我们的目的是故意将这个结点置为null,然后以此判断跳出循环条件为真,但是这是我们的思维方式,和编译器的运行方式是不同的,编译器必须先判断一个结点不为null,才能去访问它,而不是先访问到,再去判断是否为null,这显然已经访问了一个null值,这样编译器当然报错。
3.代码如下
struct ListNode
* reverseList(struct ListNode
* head
) {
if(!head
||!head
->next
)
{
return head
;
}
typedef struct ListNode list
;
list
* new_head
= malloc(sizeof(list
));
new_head
->next
=NULL;
list
* p
= head
;
list
* pnext
= p
->next
;
while(p
&&pnext
)
{
p
->next
= new_head
->next
;
new_head
->next
= p
;
p
= pnext
;
pnext
= pnext
->next
;
}
p
->next
= new_head
->next
;
return p
;
}
```c