题目:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
分析:
本道题,需要考虑两种情况:
**第一种:**链表为空,反转链表依然是一个空链表。
**第二种:**链表不为空,需要反转:
定义三个指针n1,n2,n3,分别指向NULL,head,head->next
通过n2来遍历链表,n3先到结尾,为空时,此时链表还没有遍历结束,还没有实现全部反转
实现反转:n2->next=n1
将n1移到n2的位置,n2移动到n3的位置,n3往后移动一个节点
n2还不为空,继续遍历,先反转:n2->next=n1
将n1移到n2的位置,n2移动到n3的位置,n3往后移动一个节点
重复此操作,直到n2为空时:
这里需要注意一下:当n2下一个为空时,此时n3已经为空,n3->next也是空,此时n3已经不需要,因此,需要判断一下n3为不为空。
遍历结束后,返回n1即可
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* reverseList(struct ListNode* head) {if(head==NULL){return NULL;}struct ListNode*n1,*n2,*n3;n1=NULL;n2=head;n3=head->next;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3){n3=n3->next;}}return n1;
}