#参考b站比特c语言视频,写一篇学习记录
原题在牛客网链表题都第一题。
以下画图分析:用3个数字指向原链表,逆置原链表指向。最后得到一个反转后都链表
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param pHead ListNode类
* @return ListNode类
*/
struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
if(pHead==NULL||pHead->next==NULL) return pHead;//如果只有一个节点和空链表,返回头指针
struct ListNode *n1=NULL,*n2=pHead,*n3=pHead->next;
while(n2)//3个数字轮流迭代
{
n2->next=n1;//反转
n1=n2;//迭代
n2=n3;
if(n3!=NULL) //当n3为空就不用再指向下一个,如果n3为空还指向下一个则发生错误
n3=n3->next;
}
return n1;
}
头插法
struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
//头插法
struct ListNode *newHead=NULL,*cur=pHead;
while(cur)
{
struct ListNode *next=cur->next;//next保存原链表下一个节点
cur->next=newHead; //让头节点重新指向一个头NULL,当完成一个头节点的插入后,依次循环往下头插
newHead=cur; //让cur成为新的头,cur指向下一个节点next
cur=next;
}
return newHead;
}