#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct Node
{
struct Node * next;
int v;
};
// 创建带头结点的单向链表
Node * getLinkList()
{
Node* head=new Node;
Node* linkList = head;
for(int i=0;i<10;i++){
Node *p = new Node;
p->v = i;
linkList->next = p;
linkList = p;
}
linkList->next=NULL;
return head;
}
// 创建临时链表,将新节点指向其前驱节点(注意带头结点问题)
Node* reverse1(Node * p)
{
Node *p1=NULL,*t;
p = p->next; //指向头结点的后继结点
while(p!=NULL){
t = new Node; //创建新节点
if(p1==NULL) t->next = NULL;
else{
t->next = p1;
t->v = p->v;
}
p1=t; //临时链表指向新节点
p = p->next;
}
//添加头结点
t = new Node;
t->next = p1;
p1 = t;
return p1;
}
// 原地反转
Node* reverse2(Node * p)
{
p=p->next;
Node* curNode=p,*nextNode=p->next,*t;
while(nextNode
单向链表逆转(带头结点)的两种方法
最新推荐文章于 2021-09-15 22:18:01 发布