题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
结果:
解题思路:
1,当节点数量位0或者head本身位空的时候不需要反转,直接返回原链表。
2,主要定义两个变量p/q,p用于将指向转换的节点。head用于表示反转后p的下一个节点,q用于存储反转后p的上一个节点。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
if(!head || !head->next)
return head;
struct ListNode *p = head->next;
struct ListNode *q = p->next;
head->next = NULL;
while(q)
{
p->next = head;
head = p;
p = q;
q = q->next;
}
p->next = head;
return p;
}