题目描述:
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。
一、解题思路
反转链表需要两个指针进行,我们要知道想要反转,第一个结点会变成最后一个,第二个结点会变成倒数第二个,所以需要while循环块
接下来具体如图示(以1,2,3为例):
1.首先设置p指针(p是用来遍历链表的)指向第一个结点,然后head=NULL;
2.然后设置一个专门为反转的指针q,第一个需要变为最后一个,所以先让q指向头节点p,q=p;然后让p指针到下一个结点实现遍历(p=p->next)
3.第一个结点与head(目前是空指针)连起来,q->next=head;再让head指向q
4.后续(用while实现):
思路来自于陈越姥姥那边的课,是一个男老师讲的,我觉得讲的还不错,实在不懂可以去听听
二、代码
代码如下(示例):
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode*p,*q;
p=head;
head=NULL;
while(p){
q=p;
p=p->next;
q->next=head;
head=q;
}
return head;
}