#include <iostream>
#include <malloc.h>
using namespace std;
typedef struct ListNode
{
int val;
ListNode *next;
}Node,*PNode;
/*创建一个节点数为n的链表*/
PNode CreateList(int len)
{
int val;
PNode PHead =(PNode)malloc(sizeof(Node));
PNode PTail = PHead;
PTail->next = NULL;
for(int i = 0;i<len;i++)
{
PNode PNew = (PNode)malloc(sizeof(Node));
printf("the val of the %d node:",i+1);
scanf("%d",&val);
PNew->val = val;
PTail->next = PNew;
PNew->next = NULL;
PTail = PNew;
}
return PHead;//返回的为链表的第一个节点
}
/*遍历链表显示*/
void TraverseList(PNode List)
{
PNode p = List->next;
while(p != NULL)
{
printf("%d ",p->val);
p = p->next;
}
printf("\n");
}
/*单链表反转,就地反转发*/
PNode reverse(PNode List)
{
if(List == NULL || List->next == NULL)
return List;
PNode dummy =List;
PNode prev = dummy->next;
PNode pcur = prev->next;
// dummy->next = List;//链表头
while(pcur != NULL)
{
prev->next = pcur->next;
pcur->next = dummy->next;
dummy->next = pcur;
pcur = prev->next;
}
return dummy;//返回的为链表的第一个节点
}
/*单链表反转,新建链表,插入法*/
PNode reverse_new(PNode List)
{
if(List == NULL || List->next == NULL) return List;
/*1)新建一个“空”链表*/
/*Node *dummy =new Node;
dummy->next = NULL;*/
/* or 2)创建分配一个”空“链表*/
PNode dummy = (PNode)malloc(sizeof(Node));
dummy->next = NULL;
PNode pcur = List->next;
while(pcur != NULL)
{
/*地址公用,不用分配内存空间,I think*/
PNode pNext = pcur->next;
pcur->next = dummy->next;
dummy->next = pcur;
pcur = pNext;
}
return dummy;
}
int main()
{
PNode List = CreateList(3);
TraverseList(List);
PNode reverse_List= reverse(List);
TraverseList(reverse_List);
PNode reverse_List_2 = reverse_new(reverse_List);
TraverseList(reverse_List_2);
return 0;
学习参照地址:https://www.cnblogs.com/byrhuangqiang/p/4311336.html