反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
输入:head = []
输出:[]
反转链表的主要思想是:
利用双指针,双指针一前一后,前面指针断开,指向新节点,然后移动双指针,以此往复直到遍历完链表。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *pone ,*ponenext ;
pone=head; //初始化
ponenext=head; //初始化
if(pone==NULL) //空链表就返回
return head;
ponenext = ponenext-> next; //让ponenext先走一步
pone -> next =NULL; //断开第一个节点
head = pone ; //头指针指向第一个节点
while(ponenext != NULL)
{
pone = ponenext; //pone移动到下一位
ponenext = ponenext -> next; //ponenext移动到下一位
pone-> next = head ; //指向下一节点
head = pone; //头指针指向新增的节点
}
return head;
}