100分,求一道题的答案。

唐勉的技术博客 2008-02-19 05:43:47
把一个单项链表中的元素进行互换。比如有一个单项链表,里面包括元素1,2,3,4,5,6。写一个函数把这个单项链表中的元素变成2,1,4,3,6,5.

这个问题已经解决了,连接如下:

http://topic.csdn.net/u/20080219/11/8f70226b-43f0-4788-a762-83999b334eba.html


但是,上面的方法都是通过交换元素本身的值来实现的。我觉得应该可以通过改变链表中所指向的下一个元素来实现。也就是改变p-> next的指向来实现。

不知道我的想法是否合理。

如果能实现,能否给出代码。


非常感谢。
...全文
129 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
icesnowjank 2008-02-20
  • 打赏
  • 举报
回复
把归并排序拆开来看~~~
冰矿 2008-02-19
  • 打赏
  • 举报
回复
哈哈,画画图就搞清楚了.
再给你写个节点交换的版本吧

#include <stdio.h>
typedef struct node{
int d;
struct node *next;
}N;
N * construction(int d[], int n)//建立
{
N *h,*p,*pnew;
int i;
pnew = (N *)malloc(sizeof(N));
pnew->next = NULL;
h = pnew; p = pnew;
for(i = 0; i < n; i++)
{
pnew = (N *)malloc(sizeof(N));
pnew->d = d[i]; pnew->next = NULL;
p->next = pnew;
p = p->next;
}
return h;
}
void printList(N *h)//打印
{
N *p = h->next;
while(p != NULL)
{
printf("%d ",p->d);
p = p->next;
}
printf("\n");
}
void SWAP(N *h)//交换
{
N *pre2 = h;
N *pre = h->next;
N *p = pre->next;
while(p != NULL)
{ /*交换*/
pre2->next = p;
pre->next = p->next;
p->next = pre;
/*前移*/
pre2 = pre;
pre = pre->next;
if(pre == NULL) break;
p = pre->next;
}
}

int main(int argc, char *argv[])
{
N *head = (N *)malloc(sizeof(N));
int data[6] = {1,2,3,4,5,6};
head = construction(data,6);
printList(head);
SWAP(head);//交换
printList(head);
system("PAUSE");
return 0;
}

  • 打赏
  • 举报
回复
又忘了改成100分了,明天改!

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧