链表的反转
链表反转再让结点1的next域指向结点3,最后将结点2的next域指向结点1,头结点的next域指向结点2。就完成了第一次交换,顺序就变成了Header-结点2-结点1-结点3-结点4-NULL,然后进行相同的交换将结点3移动到结点2的前面,然后再将结点4移动到结点3的前面就完成了反转
LinkedListReverseSinglyLinkedList(LinkedListlist){LNode*tmp=NULL;LNode*p=NULL;if(list==NULL){returnNULL;}tmp=list-next;//tmp第一个元素while(tmp-next!=NULL){p=tmp-next;//p第二个元素tmp-next=p-next;//1的next指向结点3p-next=list-next;//2的next指向结点1list-next=p;//头结点指向结点2}returnlist;}
怎么经过一次遍历求出链表的中间值
两个指针,一个走一步,一个走两步,当走两步的这个走到尾部,另一个走一步的就到中点
Node*Find(Node*head){Node*p1=head;Node*p2=p1;while(p2){p2=p2-next;if(p2!=NULL){p2=p2-next;p1=p1-next;}}returnp1;}
怎么把两个有序的数组整合到一个数组中,还必须有序
publicstaticvoidmerge(int[]a,int[]b){ inti=0; intj=0; int[]array=newint[a.length+b.length]; while(ia.lengthjb.length){ array[i+j]=ab[j]?a[i++]:b[j++]; } while(ia.length){ array[i+j]=a[i++]; } while(jb.length){ array[i+j]=b[j++]; }}
怎么判断两个有序的数组中是否有相同的数字
publicstaticbooleanfind(int[]a,int[]b){ inti=0,j=0; while(ia.lengthjb.length){ if(a==a[j]){ returntrue; } if(ab[j]){ i++; } if(ab[j]){ j++; } } returnfalse;}
合并两个有序的链表
合并链表ListNode*Merge(ListNode*pHead1,ListNode*pHead2){if(pHead1==NULL)returnpHead2;elseif(pHead2==NULL)returnpHead1;ListNode*pMergedHead=NULL;if(pHead1-m_nValuepHead2-m_nValue){pMergedHead=pHead1;pMergedHead-m_pNext=Merge(pHead1-m_pNext,pHead2);}else{pMergedHead=pHead2;pMergedHead-m_pNext=Merge(pHead1,pHead2-m_pNext);}returnpMergedHead;}