A.outputlist();
B.insertlist(0,Data[0]); //建立链表B首结点 for(i=0;i<10;i++)
B.insertlist(B.gethead()->Data,Data[i]); //在首结点处顺序向后插入 cout<<\链表B:\B.outputlist(); B.deletelist(67); cout<<\删除元素67后\B.outputlist(); }
程序运行结果为
链表A;25,41,16,98,5,67,9,55,1,121 删除元素Data[7]后;
25,41,16,98,5,67,9,1,121
链表B;121,1,55,9,67,5,98,16,41,25, 删除元素67后;
121,1,55,9,5,98,16,41,25, 下面是杨辉三角的代码: #include
const int n=11; int i,j,a[n][n]; for(i=1;i a[i][i]=1; a[i][1]=1; } for(i=3;i for(j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=1;i for(j=1;j<=i;j++) cout< cout< #include int num ; Node *next ; }; Node* Create() //链表创建 { int n=0; Node *p1,*p2,*head; p1=p2=new Node; cin>>p1->num; head=NULL; while (p1->num!=0) { if (n==1) { head=p1; } else p2->next=p1; p2=p1; p1=new Node; cin>>p1->num; n++; } p2->next=NULL; return head; } int ListLength(Node L) //链表的计数 { Node p=L; int count=0; while(p->next) { count++; p=p->next; } return count; } int Search(Node &L , int value) //链表的查找 { Node p=L; int index=0; while(p) { if(p->num== value) return index; p=p->next; index++; } return 0; } void Print(Node *head) //输出链表 { Node* p=head; while (p) { cout< cout< void Destruct(Node *head) //清空链表 { Node *current = head, *temp = NULL; while (current) { temp = current; current = current ->next; delete temp; } } Node *ReverseList(Node *head) //链表逆序(循环方法) { Node *p,*q,*r; p=head; //一开始p指向第一个节点 q=p->next; //q指向第二个节点 while (q!=NULL) //如果没到链尾 { //以第一次循环为例 r=q->next; //r暂时存储第三个节点 q->next=p; //没执行此句前,q->next指向第三个节点 //执行之后,q->next指向第一个节点p p=q; //之后p指向第二个节点 q=r; //q指向第三个节点 //即...p=>q=>r...变为 ...p<=q<=r... } head->next=NULL; //最后原来的链头变为链尾,把它指向NULL。 head=p; //原来的链尾变成链头 return head; } Node *ReverseList2(Node *head) //链表逆序(递归方法) { if (!head) { return NULL; } Node *temp = ReverseList2 (head->next); if (!temp) { return head; } head->next->next = head; head->next = NULL; return temp; } 递归时,head可以分别用 head ,head1,head2 ...headn-1, headn来表示总共n+1个节点 temp = ReverseList2( head->next ); 此句的递归一直将参数传进来的。 Node* head 递归到 headn 然后判断下列语句: else if( !headn->next ) { return headn; } 将返回值传给temp,此时temp指向链尾 ,由于在此次返回,故此次没有执行最后的else的那部分的语句,返回上一级即是 headn-1 那一级,继续执行 下面的 headn-1->next->next = headn-1; headn-1->next = NULL; //此两句将最后两个逆序连接, return temp; //之后返回temp比上一层的temp即是执行temp = ReverseList2( head->next )赋值,因为递归的口都是在这里的,如果说好理解点也可以将temp来编号 同理 在返回temp后,继续执行 headn-2->next->next = headn-2; headn-2->next = NULL; return temp; ..... 一直到 head时 即是原链表的第一个节点,在对其head->next = NULL后,此时以 temp 所指向的节点为链头的逆序链表就形成了. //已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(循环方法) //(保留所有结点,即便大小相同) Node *Merge(Node *head1 , Node *head2) { if ( head1 == NULL) return head2 ; if ( head2 == NULL) return head1 ; if ( head1->num < =head2->num ) { head = head1 ; head1= head1->next; } else { head = head2 ; head2 = head2->next ; } Node *temp = head ; while ( head1 != NULL && head2 != NULL) { if ( head1->num <= head2->num ) { temp->next = head1 ; head1 = head1->next ; temp =temp->next; } else { temp->next = head2; head2 = head2->next ; temp =temp->next; } } if (head1 == NULL) temp->next = head2; if (head2 == NULL) temp->next = head1; return head; }