• 链表之反转链表


    链表之反转链表

    力扣链接

    题目描述

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

    示例:

    ​ 输入: 1->2->3->4->5->NULL
    ​ 输出: 5->4->3->2->1->NULL

    限制:

    ​ 0 <= 节点个数 <= 5000

    解题思路

    方法一:

    遍历链表,并在访问各节点时修改 next 引用指向,使其指向前一个节点

    复杂度分析:

    时间复杂度 O(N) : 遍历链表使用线性大小时间
    空间复杂度 O(1) : 变量 precur 使用常数大小额外空间

    方法二:

    使用递归法遍历链表,当越过尾节点后终止递归,尾节点就是反转后的头节点,在回溯时修改各节点的 next 引用指向

    • reverseList(head) 函数:

      • 调用并返回 recur(head, null) 。传入 null 是因为反转链表后, head 节点指向 null ;
    • recur(cur, pre) 递归函数

      • 终止条件:当 cur 为空,则返回尾节点 pre (即反转链表的头节点);
      • 递归后继节点,记录返回值(即反转链表的头节点)为 res ;
      • 修改当前节点 cur 引用指向前驱节点 pre ;
      • 返回反转链表的头节点 res ;

    假如链表1->2->3->4->5->NULL
    recur(head,NULL)->recur(2,1)->recur(3,2)->recur(4,3)->recur(5,4)->recur(NULL,5)


    此时res为5->NULL,cur指向5,pre指向4,反转,使5指向4,再返回res【5->4->NULL】<-回溯<-此时返回节点5 后续步骤同理,最后res为5->4->3->2->1->NULL


    复杂度分析:

    时间复杂度 O(N) : 遍历链表使用线性大小时间。
    空间复杂度 O(N) : 遍历链表的递归深度达到 N,系统使用 O(N)大小额外空间。

    代码实现
    #include 
    
    using namespace std;
    
    struct ListNode{
    	int val;
    	ListNode* next;
    	ListNode(int x) : val(x),next(NULL){} 
    };
    
    class Solution{
    public:
    	
    	//方法一:迭代(双指针) 
    	ListNode* reverseList(ListNode* head) {
    		if(head==NULL || head->next==NULL)
    			return head;
    		else{
    			ListNode* pre = NULL;
    			ListNode* cur = head;
    			ListNode* tmp = NULL;//暂存后继节点cur->next 
    			while(cur!=NULL){		
    				tmp = cur->next;	//保存下一个节点 
    				cur->next= pre;		//让当前节点指向上一个节点 
    				pre = cur;			//pre暂存cur 
    				cur = tmp;			//cur移动到下一个节点 
    			}						//直到cur为空,此时cur从最后一个节点往后移到NULL,而pre移到了最后一个节点 
    			return pre;
    		}
       }
        
        //方法二 递归
    	ListNode* reverseList2(ListNode* head){
    		if(head==NULL||head->next == NULL){
    			return head;
    		} 
    		else
    			return recur(head,NULL);
    	}
    	
    	ListNode* recur(ListNode* cur,ListNode* pre){
    		if(cur == NULL) return pre;
    		else{
    			ListNode* res = recur(cur->next,cur);
    			cur->next = pre;
    			return res;
    		}
    	}
    	 
        //链表打印函数
        void ListPrint(ListNode* head){
        	ListNode* p = head;
    		while(p){
    			cout<val<<"->";
    			p = p->next;
    		}
    		cout<<"NULL"<next){
    				tail = tail->next;
    			}
    			tail->next = newNode;
    		}
    	}
    };
    
    
    int main(){
    	ListNode* test = new ListNode(1);
    	ListNode* re;
    	
    	class Solution s;
    	
    	s.ListPushBack(&test,2);
    	s.ListPushBack(&test,3);
    	s.ListPushBack(&test,4);
    	s.ListPushBack(&test,5);
    //	s.ListPushBack(&test,6);
    	s.ListPrint(test);
    	
    	re = s.reverseList(test);
    	s.ListPrint(re);
    	
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93

    结果:

    image-20221129113041637

    参考题解:https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/solutions/476929/jian-zhi-offer-24-fan-zhuan-lian-biao-die-dai-di-2/

  • 相关阅读:
    Java双非大二找实习记录
    双重主要上市是反垄断之后,阿里求变的序曲?
    Android端自动化测试工具源码分享
    Centos7安装docker-compose
    ZigBee 3.0实战教程-Silicon Labs EFR32+EmberZnet-3-04:模板工程创建/编译/下载-Application
    第一代高通S7和S7 Pro音频平台开启全新水平音频体验
    Kubernetes中的探针机制
    Java完全自学手册,从外包到大厂,再到年薪100万都靠它
    行业洞察 | 爱聊天的虚拟人
    如何正确操作封箱机
  • 原文地址:https://blog.csdn.net/weixin_44952783/article/details/128113223