题解 | #反转链表#

反转链表

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

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */

/**
 *
 * @param pHead ListNode类
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* pHead ) {
    // write code here
    //思路:将原链表头节点变为尾节点,然后将后续节点依次插入在 新!插!入!的节点前面。
    //这道题解法应该很多,我采用最不费脑的方法(我的小小的脑容量啊)
    if (NULL != pHead) {                        //判断是否为空节点
        struct ListNode* newhNode = pHead->next;//成为新链表头节点(临时头节点)
        struct ListNode* bufNode = pHead->next; //接原链表的next节点
        struct ListNode* tailNode = pHead;      //新链表的next节点
        if (NULL != pHead->next) {              //判断是否为单个节点,不需要反转
            pHead->next = NULL;
            while (NULL != bufNode) {    //当原链表next节点为NULL时,反转已完成,后续没有需要操作的节点了
                newhNode = bufNode;      
                bufNode = bufNode->next;        //新的头节点接到后,再移动bufNode至后一个节点
                newhNode->next = tailNode;      //插入新的头节点(将此节点放在头部)
                tailNode = newhNode;            //更新新链表的next节点,以备新的头节点的插入
            }
            return newhNode;
        }
    }
    return pHead;
}

#我的2023新年愿望#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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