遼寧人社app一直更新汕頭網(wǎng)站優(yōu)化
Practice makes perfect!
實戰(zhàn)一:
這個題由于我們不知道兩個鏈表的長度我們也不知道它是否有相交的節(jié)點,所以我們的方法是先求出兩個鏈表的長度,長度長的先走相差的步數(shù),使得兩個鏈表處于同一起點,兩個鏈表在同時走,如果兩個鏈表節(jié)點的地址相等就存在相交的節(jié)點,在放回第一個節(jié)點就可以了。
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode* curA=headA;struct ListNode* curB=headB;int lenA=1;int lenB=1;while(curA->next){lenA++;curA=curA->next;}while(curB->next){lenB++;curB=curB->next;}struct ListNode* longlist=headA;struct ListNode* shortlist=headB;int k=abs(lenA-lenB);if(lenA<lenB){longlist=headB;shortlist=headA;}while(k--){longlist=longlist->next;}while(longlist!=shortlist){longlist=longlist->next;shortlist=shortlist->next;}return shortlist;}
注意:代碼中的abs是求絕對值的函數(shù)。
實戰(zhàn)二:
我們用三個指針,n1為空,n2指向頭結(jié)點,n3指向頭結(jié)點的下一個節(jié)點,當(dāng)我們遍歷的時候,我們頭結(jié)點的下一個節(jié)點指向n1,n1挪n2的位置,n2挪到n3的位置,遍歷完成的時候n2和n3都為空指針,而我們的n1則表示頭結(jié)點,現(xiàn)在的頭結(jié)點卻是原鏈表的尾節(jié)點。
struct ListNode* reverseList(struct ListNode* head) {if(head==NULL){return NULL;}struct ListNode* n1,*n2,*n3;n1=NULL;n2=head;n3=head->next;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3){n3=n3->next;}}return n1;
}
方法來源于積累,繼續(xù)努力!