链表的反序输出(实际上链表中的内容未改变)
思想:利用递归的思想,将链表遍历至最后一个链表,然后输出,在返回上一个节点输出。
//定义节点类型 typedef struct Node { int data; struct Node* next; }Node; /*..创建链表略...*/ //逆序输出 void print_backwards(Node* head) { Node* curr=NULL; curr=head->next; if(curr==NULL) { return ; } print_backwards(curr); printf("%d\n",curr->data); }
代码很简单,但主要是要靠画图来理解,特别注意输出函数的摆放位置。
2.链表的反转:将链表中的内容反转,如1->2->3->4反转成4->3->2->1
思想:遍历一遍链表,利用一个辅助指针,记录遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经记录的指针往后依次移动继续遍历。
//定义节点类型
typedef struct Node { int data; struct Node* next; }Node; void reverse(Node*head) { if(head==NULL) { return ; } Node *pre,*curr,*ne; pre=head->next; curr=pre->next; pre->next=NULL;//主要是为了响应链表输出函数。 while(curr) { ne=curr->next; curr->next=pre; pre=curr; curr=ne; } head->next=pre; }
本文出自 “君峰俊宇” 博客,请务必保留此出处http://10274409.blog.51cto.com/10264409/1745726
原文:http://10274409.blog.51cto.com/10264409/1745726