• 反转链表


    题目描写叙述:

    输入一个链表。反转链表后,输出链表的全部元素。
    (hint : 请务必使用链表)

    输入:

    输入可能包括多个測试例子,输入以EOF结束。
    对于每一个測试案例。输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
    输入的第二行包括n个整数t(0<=t<=1000000):代表链表元素。

    输出:

    相应每一个測试案例。
    以此输出链表反转后的元素。如没有元素则输出NULL。

    例子输入:
    5
    1 2 3 4 5
    0
    例子输出:
    5 4 3 2 1
    NULL
    代码:

    有递归和非递归两种方案.

    /*
    反转链表
    by Rowandjj
    2014/7/31
    */
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct _NODE_
    {
    	int data;
    	struct _NODE_ *next;
    }Node,*pNode,*List;
    void Create(List *list,int n)
    {
    	if(n <= 0)
    	{
    		return;
    	}
    	int data;
    	scanf("%d",&data);
    	*list = (pNode)malloc(sizeof(Node));
    	if(*list == NULL)
    	{
    		exit(-1);
    	}
    	
    	(*list)->data = data;
    	(*list)->next = NULL;
    	pNode pTemp = *list;
    	for(int i = 0; i < n-1; i++)
    	{
    		pNode pNew = (pNode)malloc(sizeof(Node));
    		scanf("%d",&data);;
    		if(!pNew)
    		{
    			exit(-1);
    		}
    		pNew->data = data;
    		pNew->next = NULL;
    		pTemp->next = pNew;
    		pTemp = pNew;
    	}
    }
    //反转链表。返回反转链表的头结点
    //非递归
    List reverseList(List list)
    {
    	pNode pHead = NULL,pCur = list,pPre = NULL;
    	while(pCur != NULL)
    	{
    		pNode pNext = pCur->next;
    		if(pNext == NULL)
    		{
    			pHead = pCur;
    		}
    		pCur->next = pPre;
    		pPre = pCur;
    		pCur = pNext;
    	}
    	return pHead;
    }
    //递归
    List reverseList_2(pNode pPre,pNode pCur)
    {
    	if(pCur == NULL)
    	{
    		return NULL;
    	}
    	if(pCur->next == NULL)
    	{
    		pCur->next = pPre;
    		return pCur;
    	}
    	pNode pNext = pCur->next;
    	pCur->next = pPre;
    	pNode pHead = reverseList_2(pCur,pNext);
    	return pHead;
    }
    pNode reverse(pNode pHead)
    {
    	return reverseList_2(NULL,pHead);
    }
    int main()
    {
    	int n;
    	while(scanf("%d",&n) != EOF)
    	{
    		List list = NULL;
    		Create(&list,n);
    		list = reverse(list);
    		if(list == NULL)
    		{
    			printf("NULL
    ");
    		}
    		pNode pt = list;
    		while(pt != NULL)
    		{
    			if(pt->next == NULL)  
    				printf("%d
    ",pt->data);  
    			else  
    				printf("%d ",pt->data);  
                    pt = pt->next;  
    		}
    	
    	}
    	return 0;
    }





  • 相关阅读:
    JAVA操作数据库 http://blog.sina.com.cn/andyfang
    JSP连接各类数据库大全
    Jigloo 开发 SWT 的入门教程
    kv离线升级
    MySQL内存表的弊端
    MySQL中Order By实现原理分析
    Linux安装性能问题
    按照经纬度实现位置计算
    NOSQL数据模型和CAP原理
    C语言 side effect 和 sequence point
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5089857.html
Copyright © 2020-2023  润新知