@关与C++链表插入与倒置问题
掌握C++链表插入与倒置问题 学会新建链表,倒置数据,打印数据
结构体内容:
// An highlighted block typedef struct LNode{ string name; ElemType data; struct LNode *next; //神马,结构体也可以递归??? 只能用指针哦!不然会报错~ }LNode,*LinkList;前插法创建数据链
LinkList CreateList(int n,double j[],string name[]){ LNode *q,*L; //分别代表尾节点,新生节点,头节点 L = new LNode; L -> next = NULL; for(int i=0;i<n;i++){ q=new LNode; q->data=j[i]; q->name=name[i]; q->next = L->next; L->next= q; } return L;//一定得返回头节点啊!!! }打印数据内容
void PrintList(LinkList L){ LNode *p; p=L->next; /*p指向单链表的第1个元素*/ while(p){ // printf("%5d",p->name); //p=p->next; cout << p->name <<endl; cout << p->data <<endl; p=p->next; } }倒置列表元素(关键): 看了一些帖子,直接将头结点置为尾结点,这是不对的!!!,头结点只起指向作用,里面木有data,被绕晕了很久总算想明白了~~头结点当尾结点是里面不能存放data,需保留头结点再将其后面的结点倒置,最后链接到头结点上~
LinkList UpSideDown(LinkList L){ LNode *p,*q,*r; //创建三个元素用来存放结点 p=L->next; //存放首结点地址 q=p->next; //存放首结点的指向 p->next=NULL;//将其指向置为null,当尾结点使 while(q){ //开始置换 r=q->next; //r存放首结点后面一个结点的指向 q->next=p; //将它的指向置为 首/前一个 结点 p=q;//将当前置换的结点变为前结点 q=r; //把前一个结点往下行 } L->next = p; //将已经链好的结点付到头结点后面 return L; //返回链表 }博主第一次写文章,有错误恳请指证别介意~~~