zoukankan      html  css  js  c++  java
  • 【LeetCode】206. 反转链表

    【题目描述】

    反转一个单链表。

    示例:

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

    【提交代码】

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     struct ListNode *next;
     6  * };
     7  */
     8 
     9 
    10 struct ListNode* reverseList(struct ListNode* head){
    11     struct ListNode *p;
    12     struct ListNode *tmp;
    13 
    14     if( head == NULL )
    15         return head;
    16 
    17     p = head->next;     // p指向断开的开头,当前要反转的节点
    18     head->next = NULL;  // head始终指向反转后新链表的头
    19 
    20     while( p != NULL )
    21     {
    22         tmp = p->next;  // 预保存p的下一个节点,下一个要反转的节点
    23 
    24         p->next = head;
    25         head = p;
    26 
    27         p = tmp;
    28     }
    29 
    30     return head;
    31 }

    【提交代码】优化代码的写法

     1 struct ListNode* reverseList(struct ListNode* head){
     2     struct ListNode *pre;
     3     struct ListNode *cur;
     4     struct ListNode *tmp;
     5 
     6     pre = NULL;
     7     cur = head;
     8     while( cur != NULL )
     9     {
    10         tmp = cur->next;
    11 
    12         cur->next = pre;
    13         pre = cur;
    14         cur = tmp;
    15     }
    16 
    17     return pre;
    18 }

    【解题思路】

    注:

    找到当前需要反转的节点cur,并且记录其前一个节点pre以及下一个节点tmp_next;

    先把cur指向其pre,即反转了当前节点;然后滑动处理下一个节点;

  • 相关阅读:
    opencv图片压缩视频并读取
    python常见模块统计
    MySQL索引及优化
    web开发框架之 Tornado
    Tornado项目基本架构
    python闭包以及装饰器
    python语法糖
    python os模块
    TCP中的3次握手和4次挥手
    Python常见的数据类型方法
  • 原文地址:https://www.cnblogs.com/utank/p/13217772.html
Copyright © 2011-2022 走看看