64,652
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <Windows.h>
#include <string>
using namespace std;
typedef struct linkNode{
int nData;
struct linkNode *pNext;
}LINKNODE,*PLINKNODE;
void showLink(LINKNODE *pHead){
if(!pHead || !pHead->pNext){
return ;
}
LINKNODE *pData = pHead->pNext;
while(pData){
printf("%d ",pData->nData);
pData=pData->pNext;
}
printf("\n");
return ;
}
void freeLink(LINKNODE * &pHead){
if(!pHead || !pHead->pNext){
return ;
}
LINKNODE *pData = pHead->pNext;
while(pData){
LINKNODE *pTemp = pData->pNext;
free(pData);
pData = pTemp;
}
pHead->pNext = NULL;
return ;
}
// 后插法
void createLink(int nNumber,LINKNODE * &pHead){
if(!pHead){
pHead = (PLINKNODE)malloc(sizeof(LINKNODE));
}
LINKNODE *pData = pHead;
while(nNumber-->0){
LINKNODE *pTempNode = (PLINKNODE)malloc(sizeof(PLINKNODE));
printf("请输入链表中的数值: \n");
scanf("%d",&pTempNode->nData);
pTempNode->pNext = NULL;
pData->pNext = pTempNode;
pData = pData->pNext;
}
showLink(pHead);
}
// 前插法
void addLinkByPreInsert(LINKNODE * &pHead,int nData){
if(!pHead){
return ;
}
LINKNODE *pData = (PLINKNODE)malloc(sizeof(LINKNODE));
pData->nData = nData;
if(!pHead->pNext){
pHead->pNext= pData;
pData->pNext = NULL;
}else{
LINKNODE *pTemp = pHead->pNext;
pHead->pNext = pData;
pData->pNext = pTemp;
}
return ;
}
void reverseLink(LINKNODE *pHead){
if(!pHead || !pHead->pNext){
return ;
}
printf("请输入k值: \n");
int k = 0;
scanf("%d",&k);
LINKNODE *pNewLink = (PLINKNODE)malloc(sizeof(LINKNODE));
pNewLink->pNext = NULL;
int i = 0;
LINKNODE *pData = pHead->pNext;
while(pData){
if(i == k){
showLink(pNewLink);
freeLink(pNewLink);
i = 0;
}
addLinkByPreInsert(pNewLink,pData->nData);
pData=pData->pNext;
i++;
}
if(pNewLink->pNext){
showLink(pNewLink);
}
return ;
}
int _tmain(int argc, _TCHAR* argv[])
{
LINKNODE *pHead = NULL;
createLink(10,pHead);
reverseLink(pHead);
return 0;
}
可以参考一下