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.
    
    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    completable 用法
    spring 纯注解方式 与AOP
    springIOC原理加载过程
    多线程手写Future模式
    springMVC 实现redis分布式锁
    java线程池学习
    本地跑 spark ui 报错
    九度oj 题目1452:搬寝室
    九度oj 题目1456:胜利大逃亡
    九度oj 题目1455:珍惜现在,感恩生活
  • 原文地址:https://www.cnblogs.com/siweihz/p/12285160.html
Copyright © 2011-2022 走看看