【练习】单链表反转,合并
2011-11-22 14:20
260 查看
//链表反转http://www.2cto.com/kf/201110/106607.html //链表合并 #include <iostream> using namespace std; struct LinkList { int value; LinkList* next; }; void CreatLinkList(LinkList* &head) { int n; if (!head) { cout<<"input nodes"<<endl; cin>>n; head=new LinkList; head->next=NULL; head->value=n; } LinkList* prev=head; while (n!=-1) { cin>>n; if (n==-1) { break; } LinkList* pcurrent=new LinkList; pcurrent->value=n; prev->next=pcurrent; pcurrent->next=NULL; prev=pcurrent; } } void PrintLinkList(LinkList* head) { if (head==NULL) { return; } while(head!=NULL) { cout<<head->value<<" "; head=head->next; } cout<<endl; } void ReverseLinkList(LinkList* &head) { if (!head||!head->next) { return; } LinkList *p=head; LinkList *q=head->next; head->next=NULL; while (q) { LinkList *r=q->next; q->next=p; p=q; q=r; } head=p; } LinkList* CombineLinkList(LinkList* head1,LinkList* head2) { LinkList* newhead=head1; if (!head1||!head2) { return NULL; } while(head1!=NULL) { if (head1->next==NULL) { break; } head1=head1->next; } head1->next=head2; return newhead; } int main() { LinkList *head=NULL; LinkList *head2=NULL; CreatLinkList(head); cout<<"list 1"<<endl; PrintLinkList(head); ReverseLinkList(head); cout<<"after reverse"<<endl; PrintLinkList(head); CreatLinkList(head2); cout<<"list 1"<<endl; PrintLinkList(head); cout<<"list 2"<<endl; PrintLinkList(head2); LinkList *newList=CombineLinkList(head,head2); cout<<"after combine linklist"<<endl; PrintLinkList(newList); return 0; }
相关文章推荐
- 剑指Offer面试题16反转链表(递归和非递归),面试题17合并两个排序的链表(递归)
- 编程练习- 链表题目-反序,合并
- LeetCode算法练习(合并2个有序链表)
- 第六章堆排序之“用最小堆将k个已排序链表合并为一个排序链表”(练习6.5-8)
- 链表操作综合练习(创建、拆分、插入、删除、合并、打印、逆置)
- 反转单链表+合并有序单链表+查找单链表中倒数第k个节点--20150924
- 数据结构练习1——链表合并
- 剑指offer-算法题练习:part17 反转链表
- 链表的合并与反转
- 反转链表练习
- #旧代码# 基本算法练习:常见排序/KMP字符串查找/链表反转
- 编程练习-反转链表
- 算法题练习系列之(十八): 反转链表
- 《剑指offer》学习之--反转链表与合并两个排序链表
- 单链表反转 合并 等例子
- “用最小堆将k个已排序链表合并为一个排序链表”(算法导论 练习6.5-9)
- [算法练习] 反转链表
- 剑指Offer编程练习015——反转链表
- 链表的反转、合并(不借助额外list数组)
- C++单链表反转、两有序链表合并仍有序