单链表一次遍历反序

    技术2022-05-19  20

     

      《编程之美》有这样一个例子,单链表在不告诉头指针的情况下完成删除指定节点的方法,

     

                   

      代码如下:

          pCurrent->next = pNext->next;

          pCurrent->data = pNext->data;

          delete pNext;

     

          扩展问题为编写一个函数,给定一个链表的头指针,要求遍历一次,将单链表中的顺序反过来。

    #include<stdio.h> #include<stdlib.h> / typedef struct Node{ int value; struct Node * next; } NODE; /单链表一次遍历逆序函数 NODE * reverse(NODE * head) { NODE * current = head->next; NODE * p1 = NULL; NODE * p2 = current->next; while(p2!=NULL) { current->next=p1; p1=current; current=p2; p2=p2->next; } current->next = p1; return current; } /测试。。 int main() { NODE * head = (NODE *)malloc(sizeof(NODE)); head->next=NULL; NODE * p = head; int i; for(i=0;i<10;i++) { NODE * newnode = (NODE *)malloc(sizeof(NODE)); newnode->next=NULL; newnode->value=i; p->next = newnode; p=p->next; } NODE * q = head->next; printf("/nBefore reverse../n"); while(q!=NULL) { printf("%d->",q->value); q=q->next; } q = reverse(head); printf("/nAfter reverse../n"); while(q!=NULL) { printf("%d->",q->value); q=q->next; } system("pause"); return 0; }

     

    注:写程序的时候记得free链表的空间,只是测试所以我没写。

     

     

     

     


    最新回复(0)