leetcode.92. Reverse Linked List II

 
 


/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };1
. 。*/
struct ListNode* reverseBetween(struct ListNode* head, int m, int n) {
if(head==NULL||head->next==NULL)
return head;
int i,j;
struct ListNode *p,*a,*q,*bot;
p=(struct ListNode*)malloc(sizeof(struct ListNode));
p->next=head;
bot=p;
for(i=1;i<m;i++)
{
p=p->next;//把q指针放在m前一个数
}
a=p->next;
for(i=m;i<n;i++)
{
q=a->next;
a->next=q->next;//a自动移动
q->next=p->next;//这里不能写成q—>next=a 只是第一次行,插入的节点放在上一次插入节点之前
p->next=q;
}
return bot->next;
}

 

本身就是一个链表置逆的,但是有很多种可能报错。
1.Line x: member access within null pointer of type… 加判断指针是否为空就行

2.可能会出现好多种比较特殊的数据格式我自己之前并没有建立空节点来让指针放前,后来这种形式的就没法运行了

Input:[3,5] 1 2
Output:[3,5]
Expected:[5,3]
所以必须建立空节点,这种指针就无法交换了。
3.返回不能返回head
Input:[3,5] 1 2
Output:[3]
Expected:[5,3]
在从第一个数就开始对换的情况下,head指向的第一个节点被移动到后面去了,所以少了一个数。

 

猜你喜欢

转载自www.cnblogs.com/yuhaowang/p/10177156.html