如何将网站做成app兰州网站建设优化
题目:
给你单链表的头节点 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;
}
