给你单链表的头节点 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *q;
struct ListNode *l;//新的链表
struct ListNode *p;//搬运工
q=head;
if(!q||!(q->next)){//如果q为空或者第一位为空
l=head;//直接让新的链表等于head
}else{
l=(struct ListNode*)malloc(sizeof(struct ListNode));
l->next=NULL;//建立一个头节点为空的单链表
while(q){//如果q不为空
p=(struct ListNode*)malloc(sizeof(struct ListNode));//生成新节点
p->val=q->val;//让新节点的值等于此时q的值
p->next=l->next;
l->next=p; //插到表头
q=q->next;//q往后移一位
}
//因为代码还存在一些问题,新链表的头部会多出一位需要删除
q=l;//重新让q等于l链表-->这句表示q现在等于l的第个节点
l=q->next;//删除l的头节点(让链表l的第一个节点等于第二个节点)
}
return l;
}
代码还有问题,期待大神的点拨