今天去参加笔试,⊙﹏⊙b汗,单链表逆序算法竟然不会写了,真丢人了。
回来好好写了一遍.....
Java
- public class Node
- {
- int data;
- Node next=null;
- public Node(int data){
- this.data=data;
- }
- public static Node reverse(Node head){
- Node p=null;
- Node q=head;
- while(head.next!=null){
- p=head.next;
- head.next=p.next;
- p.next=q;
- q=p;
- }
- return q;
- }
- public static void main(String[] args) {
- Node head=new Node(0);
- Node tail=head;
- for(int i=1;i<10;i++){
- Node p=new Node(i);
- tail.next=p;
- tail=p;
- }
- head=reverse(head);
- while(head.next!=null){
- System.out.println(head.data);
- head=head.next;
- }
- }
- }
C语言
- #include<stdio.h>
- #include<stdlib.h>
- #definestacksize100
- typedefintdatatype;
- typedefstruct
- {
- datatypedata[stacksize];
- int top;
- }seqstack;
- typedefstructnode{
- datatype data;
- structnode*next;
- }listnode;
- typedeflistnode*linklist;
- linklisthead;
- linklistp;
- intcount;
- linklistcreatlist(intn)
- {
- linklisthead;
- listnode*p1,*p2;
- inti;
- head=(linklist)malloc(sizeof(listnode));
- head->next=NULL;
- p2=head;
- printf("Pleaseinputtherecordsofthechain!/n");
- for(i=0;i<n;i )
- {
- p1=(linklist)malloc(sizeof(listnode));
- scanf("%d",&p1->data);
- p1->next=p2->next;
- p2->next=p1;
- p2=p1;
- }
- return(head);
- }
- voidprint(linklisthead,intn)
- {
- if(head==NULL)
- printf("listnull!/n");
- printf("Nowthese%drecordsare:/n",n);
- p=head->next;
- printf("M",p->data);
- count=1;
- while(p->next!=NULL)
- {
- count ;
- p=p->next;
- printf("M",p->data);
- if(!(count))
- printf("/n");
- }
- }
- datatypepush(seqstack*s,intx)
- {
- if(s->top==stacksize-1)
- printf("Thestackisoverflow!/n");
- else
- s->data[ s->top]=x;
- }
- datatypepop(seqstack*s)
- {
- if(s->top==-1)
- printf("thestackisempty!/n");
- else
- return(s->data[s->top--]);
- }
- datatypedeleted(linklisthead)
- {
- datatypetemp;
- linklistp;
- p=head->next;
- temp=(p->data);
- head->next=p->next;
- free(p);
- return(temp);
- }
- voidinvertedlist(linklisthead,intn)
- {
- seqstacks;
- inti,j,temp;
- s.top=-1;
- for(i=0;i<n;i )
- {
- temp=deleted(head);
- push(&s,temp);
- }
- for(i=0;i<n;i )
- {
- temp=pop(&s);
- printf("]",temp);
- if(!((i 1)))
- printf("/n");
- }
- printf("/n");
- }
- main()
- {
- linklisthead;
- intn;
- printf("Pleaseinputthevalueofn:/n");
- scanf("%d",&n);
- head=creatlist(n);
- print(head,n);
- printf("/n");
- printf("Afterinverting,therecordsofthechainare:/n");
- invertedlist(head,n);
- system("pause");
- return0;
- }
C++
- #include<iostream.h>
- #include<stdlib.h>
- typedef struct Lnode
- {
- int data;
- struct Lnode *next;
- }*LinkList;
- void CreateList(LinkList &L,int n)
- {
- LinkList p;
- int i;
- L=(LinkList)malloc(sizeof(Lnode));
- L->next=0;
- for(i=n;i>0;i--)
- {
- p=(LinkList)malloc(sizeof(Lnode));
- p->data=i;
- p->next=L->next;
- L->next=p;
- }
- }
- void ob(LinkList &L)
- {
- LinkList p,q;
- p=L;
- p=p->next;
- L->next=0;
- while(p!=0)
- {
- q=p;
- p=p->next;
- q->next=L->next;
- L->next=q;
- }
- }
- void out(LinkList L)
- {
- LinkList p;
- p=L;
- p=p->next;
- while(p)
- {
- cout<<p<<"/t"<<p->data<<"/t"<<p->next<<endl;
- p=p->next;
- }
- }
- void main()
- {
- LinkList L;
- CreateList(L,10);
- out(L);
- ob(L);
- cout<<endl;
- out(L);
- }