题解 | #链表内指定区间反转#

链表内指定区间反转

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
 */
#include <math.h>
#include <stddef.h>
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
    // write code here
    struct ListNode* new_head=(struct ListNode*)malloc(sizeof(struct ListNode));
    new_head->next = head;
    struct ListNode* p1=new_head;
    struct ListNode* p2=NULL;
    struct ListNode* p3=NULL;
    struct ListNode* p4=NULL;
    struct ListNode* cur=NULL;
    struct ListNode* pre=NULL;
    struct ListNode* next=NULL;
	//1->2->3->4->5
  	//p1 p2    p3 p4
  	//首先遍历一遍链表找到这四个点,然后将p2到p3这块反转,再重定向p1->next=p3;p2->next=p4;
  	//结束

    int i=0;

    for(i = 0;i < m-1;i++)
    {
        p1=p1->next;
    }
    p2=p1->next;

    p3=p2;
    for(i=0;i<n-m;i++)
    {
        p3=p3->next;
    }
    p4=p3->next;

    //从p2开始反转
    cur=p2;
    for(i=0;i<n-m+1;i++)
    {
        next=cur->next;
        cur->next=pre;
        pre=cur;
        cur=next;
    }

    p1->next=p3;
    if(p4 != NULL)
    {
        p2->next=p4;
    }
    
    //printf("p1,p2,p3,p4->val is %d %d %d %d\n",p1->val,p2->val,p3->val,p4->val);

    return new_head->next;
}

全部评论

相关推荐

08-05 14:05
门头沟学院 Java
Twilight_m...:你直接问他,马总能不能直聘让我进阿里
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
Syameimaru...:不是 hr问个年龄你怎么这么没素质
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-08 10:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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