链表-专题
前面:我真的很不喜欢刷题
题型一:反转链表
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; }