链表-专题
前面:我真的很不喜欢刷题
题型一:反转链表
ListNode* reverseList(ListNode* head) {
ListNode* p1=NULL,*p2=head;
while(p2)
{
ListNode *tmp=p2->next;
p2->next=p1;
p1=p2;
p2=tmp;
}
return p1;
}
题型二:反转链表2
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* p1=head;
for(int i=1;i<m-1;i++) p1=p1->next;
ListNode* p2=NULL,*p3=p1->next,*p4;
if(m==1) p3=p1;
int cnt=m;
ListNode *tmp=NULL;
while(cnt!=n+1)
{
tmp=p3->next;
p3->next=p2;
p2=p3;
p3=tmp;
if(cnt==m) p4=p2;
cnt++;
}
if(m!=1)
{
p1->next=p2;
p4->next=tmp;
}
else
{
head=p2;
p4->next=tmp;
}
return head;
}

浙公网安备 33010602011771号