数据结构论坛

首页 » 分类 » 分类 » 基本数据结构链表的总结
TUhjnbcbe - 2025/2/10 16:44:00
北京白癜风哪里看好 https://disease.39.net/bjzkbdfyy/240412/c9oekn7.html

链表的反转

链表反转

再让结点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;}

1