阿杰 发表于 2009-8-9 10:12:09

【原创】取简单的链表操作

<font face="Verdana">/* 编写函数实现链表的逆置。*/<br/>#include &lt;stdio.h&gt; /*标准输入、输出函数库*/<br/>#include &lt;stdlib.h&gt;<br/>#define LEN sizeof(struct list)<br/>/*定义节点数据类型*/<br/>struct list<br/>{<br/>&nbsp;int data; /*节点的数据类型,可以是其它类型*/<br/>&nbsp;struct list *next;<br/>};<br/>/* 创建链表,并返回表头指针 */<br/>struct list *create(void);<br/>/*对链表逆置的函数*/<br/>struct list *invert(struct list*);<br/>/*输出链表*/<br/>void print(struct list*);<br/>int main()<br/>{<br/>&nbsp;struct list *h,*t; /*定义一个链表,h为头指针*/<br/>&nbsp;h = create(); /*创建链表*/<br/>&nbsp;printf("创建的链表是:\n");<br/>&nbsp;print(h); /*输出所创建的链表*/<br/>&nbsp;t = invert(h); /*对链表进行逆置*/<br/>&nbsp;printf("逆置后的链表是:\n");<br/>&nbsp;print(t); /*输出逆置后的链表*/<br/>&nbsp;return 0;<br/>} <br/>struct list *create() /* 创建链表,并返回表头指针。带一个头指针的链表 */<br/>{<br/>&nbsp;struct list *head; /* 表头 */<br/>&nbsp;struct list *p;&nbsp;&nbsp;&nbsp; /* 新建结点 */<br/>&nbsp;struct list *tail; /*表尾节点*/<br/>&nbsp;int input; /*输入的数据*/<br/>&nbsp;head = NULL; /* 还没有任何数据,表头为空 */<br/>&nbsp;tail = head; /*尾指针首先指向表头指针*/<br/>&nbsp;printf("请输入结点数据:\n");<br/>&nbsp;scanf("%d", &amp;input);<br/>&nbsp;while (input != 0)<br/>&nbsp;&nbsp;/* 假设data为0表示输入结束 */<br/>&nbsp;{<br/>&nbsp;&nbsp;p = (struct list*)malloc(LEN); /* 新建一个结点 */<br/>&nbsp;&nbsp;p-&gt;data = input;<br/>&nbsp;&nbsp;p-&gt;next = NULL;<br/>&nbsp;&nbsp;if (head == NULL)<br/>&nbsp;&nbsp;&nbsp;/*链表为空表*/<br/>&nbsp;&nbsp;&nbsp;head = p;<br/>&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;tail-&gt;next = p;<br/>&nbsp;&nbsp;/* 在表尾链接新结点 */<br/>&nbsp;&nbsp;tail = p; /* 新建结点成为表尾 */<br/>&nbsp;&nbsp;printf("请输入结点数据:\n");<br/>&nbsp;&nbsp;scanf("%d", &amp;input);<br/>&nbsp;} if (head != NULL)<br/>&nbsp;&nbsp;/*输入了数据,已插入节点*/<br/>&nbsp;&nbsp;tail-&gt;next = NULL;<br/>&nbsp;/* 输入结束,表尾结点的下一个结点为空 */<br/>&nbsp;return head; /* 返回表头指针 */<br/>}<br/>void print(struct list *head) /*输出链表*/<br/>{<br/>&nbsp;if (head == NULL)<br/>&nbsp;{<br/>&nbsp;&nbsp;printf("链表空!\n");<br/>&nbsp;&nbsp;return ;<br/>&nbsp;} <br/>&nbsp;while (head != NULL)<br/>&nbsp;{<br/>&nbsp;&nbsp;printf("%4d", head-&gt;data);<br/>&nbsp;&nbsp;head = head-&gt;next;<br/>&nbsp;}<br/>&nbsp;printf("\n");<br/>}<br/>/*对链表逆置的函数*/<br/>struct list *invert(struct list *head)<br/>{<br/>&nbsp;struct list *p,&nbsp; *q; /*用于逆置的中间变量*/<br/>&nbsp;if (head == NULL)<br/>&nbsp;{<br/>&nbsp;&nbsp;printf("链表空!\n");<br/>&nbsp;&nbsp;return head;<br/>&nbsp;} p = head;<br/>&nbsp;head = NULL;<br/>&nbsp;while (p != NULL)<br/>&nbsp;{<br/>&nbsp;&nbsp;q = p-&gt;next;<br/>&nbsp;&nbsp;p-&gt;next = head;<br/>&nbsp;&nbsp;head = p;<br/>&nbsp;&nbsp;p = q;<br/>&nbsp;}<br/>&nbsp;return head;<br/>}</font>

马大哈 发表于 2009-8-12 00:02:03

<p>.....被这玩意给玩过了- -!</p>
<p>&nbsp;</p>
<p>上次陈辉弄的那个代码里用的就是链表,直接晕掉@_@</p>
页: [1]
查看完整版本: 【原创】取简单的链表操作