zoukankan      html  css  js  c++  java
  • 剑指offer 16:反转链表

    题目描述

    输入一个链表,反转链表后,输出新链表的表头。

    解题思路

    单链表原地反转是面试手撕代码环节非常经典的一个问题。针对一般单链表,反转的时候需要操作的是当前节点及与之相邻的其他两个节点。因而需要定义三个临时节点进行指针的指向变化。

    一个非常重要的原则:一定要保证代码的鲁棒性。(NULL检验,链表越界检验等等等等,越简单的代码,越考验代码基础功底)

    C++代码实现:

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* ReverseList(ListNode* pHead) {
            ListNode *p=NULL,*q=pHead,*tmp=NULL;
            while(q!=NULL){
                tmp=q->next;
                q->next=p;
                p=q;
                q=tmp;
            }
            if(pHead!=NULL){  //pHead的指向全程未操作过,所以当反转完成时指向的是最后一个(原第一个)节点,尾节点需要及时置为NULL;
                pHead->next==NULL;
            }
            pHead=p;
           return pHead;
        }
    };        
  • 相关阅读:
    ASP.NET 页面访问控制
    数据库设计——范式
    C#接口
    员工签到签退
    sharepoint content type publishing
    安卓自动化测试环境搭建
    SharePoint 2016 Document Center Send To Connection
    ADO.NET DBHelper 类库
    SQL语句总结
    移动端屏幕适配问题
  • 原文地址:https://www.cnblogs.com/fancy-li/p/11616019.html
Copyright © 2011-2022 走看看