首页 > 其他 > 详细

剑指offer 16:反转链表

时间:2019-10-01 21:03:56      阅读:92      评论:0      收藏:0      [点我收藏+]

题目描述

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

解题思路

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

一个非常重要的原则:一定要保证代码的鲁棒性。(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;
    }
};        

 

剑指offer 16:反转链表

原文:https://www.cnblogs.com/fancy-li/p/11616019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!