题目描述:给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
思路:迭代的方法就是说
设置三个指针p q L(p初始化指向null,q指向第一个结点1,L指向q的下一个结点,每一次循环都让三个指针分别往后移动一个位置)在遍历链表时,将当前节点的指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
不多说直接上代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode *p,*q,*l;
p=NULL;
q=head;
while(q!=NULL)
{
l=q->next;
q->next=p;
p=q;
q=l;
}
return p;
}
运行结果: