题解 | #反转链表#

反转链表

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

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* head ) {
    struct ListNode* p = NULL;
    struct ListNode* cur = head;
        while(cur){
        struct ListNode* r = p;
        p = cur;
        cur = cur->next;
        p->next = r;
    }
    return p;
}

分析:此题目涉及到链表的头插法以及链表的遍历知识,大致思路是一边遍历链表一边把遍历到的节点通过头插法插入另一个新的链表p

步骤:

  1. 定义好一个新的空链表p和遍历的cur,还有暂时存储首节点的r;
  2. 遍历,将遍历到的cur加到新链表p之后:p = cur,所以在此之前一定要把p的值用r存起来:r = p;
  3. 往后遍历cur = cur->next,同时p之后加上r:p->next = r;
  4. 遍历完成,返回p
#链表反转#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-21 13:38
8月实习会变多吗现在还没找到实习该怎么办...回复的hr好少
码农索隆:3-4月就要开始找,基本上6月份就发offer,7月初已经开始暑期实习了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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