一、双指针的方法
定义两个指针“pre、cur”,pre初始化指向null,cur指向head节点,再定义一个临时指针tmp保留head->next节点。
1. pre=NULL; //初始化pre指针
2. cur=head; //初始化cur指针
3. tmp=cur->next; //改变指向前,保留当前节点的next
4. cur->next=pre; //改变当前节点的指向
struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
LinkNode* TureLinkNode(LinkNode *fnp){
struct LinkNode *pre=NULL;
struct LinkNode *cur=fnp;
struct LinkNode *tmp=NULL;
while(cur){
tmp=cur->next; //改变当前指针前,保留next
cur->next=pre; //指针指向翻转
pre=cur; //指针移动
cur=tmp;
}
return pre; //返回翻转后的链表的头结点
}
二、递归的方法
递归模式:
1.当headnull or head->nextnull。//递归终止条件为空链表或者尾指针
2.head->next->next=head; //让下一个节点的next指向自己,实现翻转
3.
传入一个单链表的头结点;
LinkNode* TureLinkNode(LinkNode *fnp){
if(head==NULL||head->next==NULL)
return head;
LinkNode *res = TureLinkNode(fnp->next);
fnp->next->next = head;
fnp->next=NULL;
return res;
}