zoukankan      html  css  js  c++  java
  • 刷题206. Reverse Linked List

    一、题目说明

    题目206. Reverse Linked List,翻转一个链表。难度是Easy!可以递归,也可以非递归。

    二、我的解答

    翻转,这个确实不难,非递归算法:

    class Solution{
    	public:
    		ListNode* reverseList(ListNode* head){
    			if(head == NULL || head->next==NULL) return head;
    			ListNode *cur,*p = head->next;
    			bool first = true;
    			while(p !=NULL && p->next!=NULL){
    				cur = p->next;
    				
    				p->next = head;
    				if(first){
    					head->next = NULL;
    					first = false;
    				}
    				
    				head = p;
    				p = cur;
    			}
    			if(p !=NULL){
    				p->next = head;
    				if(first){
    					head->next = NULL;
    					first = false;
    				}
    				head = p;
    			}
    			
    			return head;
    		}
    };
    

    性能如下:

    Runtime: 8 ms, faster than 88.11% of C++ online submissions for Reverse Linked List.
    Memory Usage: 9.7 MB, less than 5.34% of C++ online submissions for Reverse Linked List.
    

    三、优化措施

    用翻转链表法实现:

    class Solution{
    	public:
    		ListNode* reverseList(ListNode* head){
    			//翻转链表 
    			ListNode *pre = NULL;
    			ListNode *cur = head;
    			ListNode *tmp = NULL;
    			while(cur!=NULL) {
    				//记录当前节点的下一个节点
    				tmp = cur->next;
    				//然后将当前节点指向pre
    				cur->next = pre;
    				//pre和cur节点都前进一位
    				pre = cur;
    				cur = tmp;
    			}
    			return pre;
    		}
    };
    
    Runtime: 12 ms, faster than 38.84% of C++ online submissions for Reverse Linked List.
    Memory Usage: 9.7 MB, less than 5.34% of C++ online submissions for Reverse Linked List.
    
    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    转 [ javascript面向对象技术
    制作双击可运行的jar
    使用eclipse和maven一步一步配置web项目
    [转]hibernate三种状态详解
    [转]hibernate缓存机制所有详解
    Miniprofiler在普通net项目中的使用
    sql server 中更改默认实例
    使用awstats分析iis站点的日志
    NaN 和 Infinity
    反射的结果中排除隐藏的成员
  • 原文地址:https://www.cnblogs.com/siweihz/p/12285160.html
Copyright © 2011-2022 走看看