《编程之美》有这样一个例子,单链表在不告诉头指针的情况下完成删除指定节点的方法,
代码如下:
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链表的空间,只是测试所以我没写。