Reverse-1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct tagLinkList{
	struct tagLinkList *next;
	int num;
}LINK_LIST_S; 

LINK_LIST_S *LinkList_CreateNode(int num)
{
	LINK_LIST_S *pstLinkList = NULL;
	
	pstLinkList = (LINK_LIST_S *) malloc(sizeof(LINK_LIST_S));
	if (NULL != pstLinkList)
	{
		memset(pstLinkList, 0, sizeof(LINK_LIST_S)); 
		pstLinkList->num = num;
	}

	return pstLinkList;
}

int LinkList_AddNodeBefore(LINK_LIST_S *pstHead, int num)
{
	LINK_LIST_S *pstAddNode = NULL;
	LINK_LIST_S *pstCurNext = NULL;
	
	pstAddNode = LinkList_CreateNode(num);
	if (NULL == pstAddNode)
	{	
		return -1;	
	}
	
	pstCurNext = pstHead->next;	

	pstHead->next = pstAddNode;
	pstAddNode->next = pstCurNext;	

	return 0;
}

void LinkList_DisplayAll(LINK_LIST_S *pstHead)
{
	LINK_LIST_S *pstCurNode = NULL;

	pstCurNode = pstHead->next;
	while (NULL != pstCurNode)
	{
		printf("current num = %d \r\n", pstCurNode->num);
		pstCurNode = pstCurNode->next;	
	}


	return;
}

int LinkList_Init(LINK_LIST_S *pstHead, int num)
{
	LINK_LIST_S *pstCurNode = NULL;
	int iCount = 0;
	int iRet = 0;
	for (iCount = 0; iCount < num; iCount++)
	{
		iRet = LinkList_AddNodeBefore(pstHead, iCount);
		if (iRet != 0)
		{
			break;
		}
	
	}
	
	return iRet;
}

int LinkList_Reverse(LINK_LIST_S *pstHead, LINK_LIST_S *pstNewHead)
{
	LINK_LIST_S *pstCurNode = NULL;
	LINK_LIST_S *pstNextNode = NULL; 

	pstNextNode = pstHead->next;
	while (pstNextNode != NULL)
	{
		/* get cur node*/
		pstCurNode = pstNextNode;

		/* move the old head to the next node*/
		pstNextNode = pstCurNode->next;

		/* add cur node before the new head */
		pstCurNode->next = pstNewHead->next;
		pstNewHead->next = pstCurNode;

	}
	
	return 0;		
}

int main()
{
	LINK_LIST_S stHead;
	LINK_LIST_S stReverseHead;

	memset(&stHead, 0, sizeof(stHead));
	memset(&stReverseHead, 0, sizeof(stHead));
	
	LinkList_Init(&stHead, 10);

	LinkList_DisplayAll(&stHead);
	
	printf("Reverse...\r\n");

	LinkList_Reverse(&stHead, &stReverseHead);

	LinkList_DisplayAll(&stReverseHead);

	return 0;	
}
运行结果:

current num = 9 
current num = 8 
current num = 7 
current num = 6 
current num = 5 
current num = 4 
current num = 3 
current num = 2 
current num = 1 
current num = 0 
Reverse...
current num = 0 
current num = 1 
current num = 2 
current num = 3 
current num = 4 
current num = 5 
current num = 6 
current num = 7 
current num = 8 
current num = 9 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值