题解 | #反转链表#

反转链表

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

双指针迭代法

 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */

/**
 * 
 * @param pHead ListNode类 
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* pHead ) {
    // write code here
    //双指针迭代法
    struct ListNode* p=NULL;
    struct ListNode* q=NULL;
    //q为下一个要指向的链表节点
    //p为记录原链表的下一个节点,转换方向后避免丢失
    while(pHead!=NULL)
    {
        p=pHead->next;
        pHead->next=q;
        q=pHead;
        pHead=p;
    }
    return q;
}

头插法

 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 
 * @param pHead ListNode类 
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* pHead ) {
    // write code here
    //头插法
    struct ListNode* H=malloc(sizeof(struct ListNode));
    H->next=NULL;
    struct ListNode* cur=pHead;
    struct ListNode* q=NULL;
    while(cur!=NULL)
    {
        q=cur;
        cur=cur->next;
        q->next=H->next;
        H->next=q;
    }
    return H->next;
}
全部评论

相关推荐

牛客44664404...:把个人技能删了搞这么长干什么!还有你面试要先针对那个公司的技术栈专门去准备,别一问三不知,他需要你会他们公司对口的技术,写这么多不对口没有用
点赞 评论 收藏
分享
敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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