题解 | #反转链表#

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
    if(pHead==NULL||pHead->next==NULL)//首先判断链表节点情况,空表或者只有一个节点时直接return pHead即可
        return pHead;
        else if(pHead->next->next==NULL)//两个节点的话也很简单,不解释了
        {
            ListNode *q=pHead;
            pHead=pHead->next;
            pHead->next=q;
            q->next=NULL;
            return pHead;
        }
        else//重点在于大于等于三个节点,此时定义两个前驱和后继指针q,p循环赋值即可改变原有链表指向
        {
            ListNode *q=pHead;
            pHead=pHead->next;
            ListNode *p=pHead->next;
            q->next=NULL;
            while(p!=NULL)
            {
                pHead->next=q;
                q=pHead;
                pHead=p;
                p=p->next;
            }
              pHead->next=q;
            return pHead;
        }
    }
};
全部评论

相关推荐

07-11 11:10
门头沟学院 Java
请问各位大三兄弟们跟hr说多久实习时间到时候可以提前跑路吗?
程序员小白条:问就是六个月以上,可以一年,实习都这样,你入职后想跑就跑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务