zoukankan      html  css  js  c++  java
  • 经典链表翻转(C/C++)

    题目

    1、描述
    输入一个链表,反转链表后,输出新链表的表头。

    2、示例
    输入:

    {1,2,3}

    输出:

    {3,2,1}

    思路

    1、初始化:3个指针
    (1)pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向nullptr
    (2)cur指针指向待反转链表的第一个节点,最开始第一个节点待反转,所以指向head
    (3)nex指针指向待反转链表的第二个节点,目的是保存链表,因为cur改变指向后,后面的链表则失效了,所以需要保存

    2、接下来,循环执行以下三个操作,改变链表指向3
    (1)保存下一个节点
    p_next = p_cur->next;
    (2)未反转链表的第一个节点的下个指针指向已反转链表的最后一个节点
    p_cur->next = p_pre;
    (3)节点后移
    p_pre = p_cur;
    p_cur = p_next;

    备注:
    循环条件,当然是p_cur != nullptr
    循环结束后,p_cur当然为nullptr,所以返回p_pre,即为反转后的头结点

    3、图例
    (2)初始状态

    (2)改变指向,节点后移

    (3)完成翻转后结果

    代码

    /*
    struct ListNode {
    	int val;
    	struct ListNode *next;
    	ListNode(int x) :
    			val(x), next(NULL) {
    	}
    };*/
    class Solution {
    public:
        ListNode* ReverseList(ListNode* pHead) {
            if(NULL == pHead)
                return NULL;
            ListNode *p_cur = pHead;
            ListNode *p_next = pHead->next;
            ListNode *p_pre = NULL;
            while(p_cur)
            {
                p_next = p_cur->next;
                p_cur->next = p_pre;
                p_pre = p_cur;
                p_cur = p_next;
            }
            return p_pre;
        }
    };
    
    Posted By veis
  • 相关阅读:
    Ubuntu部署Asp.net core网站无法访问
    .Net Core IFormFile 始终为空的问题
    Webbench的使用
    JS设置localStorage有效期
    Autofac的简单使用
    对于异步的理解
    DBHelper 数据库帮助类
    利用反射把数据库查询到的数据转换成Model、List(改良版)
    部署方案@应用系统单点切换解决方案
    部署方案@项目版本管理控制流程规范
  • 原文地址:https://www.cnblogs.com/veis/p/14854326.html
Copyright © 2011-2022 走看看