题解 | #反转链表#

反转链表

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;
        }
    }
};
全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务