您的位置:首页 > 编程语言 > C语言/C++

C语言 单链表的 反序输出 与 反转

2016-02-28 12:05 260 查看
链表的反序输出(实际上链表中的内容未改变)

思想:利用递归的思想,将链表遍历至最后一个链表,然后输出,在返回上一个节点输出。

//定义节点类型
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息