把一个带头链表进行分割的两种算法

 把一个带头链表进行分割
       L = {a1, b1, a2, b2, a3, b3 ... an, bn}
       L1 = {a1, a2, a3 ... an} 使用尾插法进行修改,得到的链表是正序数的
       L2 = {bn ... b3, b2, b1} 使用头插法进行修改,得到的链表是倒序数的

 1 #include <iostream>
 2 
 3 using std::string;
 4 using std::string;
 5 
 6 typedef struct Lnode
 7 {
 8     string name;
 9     struct Lnode * next;
10 
11 }LinkNode;
12 
13 // 把一个带头链表进行分割
14 //        L = {a1, b1, a2, b2, a3, b3 ... an, bn}
15 //        L1 = {a1, a2, a3 ... an} 使用尾插法进行修改,得到的链表是正序数的
16 //        L2 = {bn ... b3, b2, b1} 使用头插法进行修改,得到的链表是倒序数的
17 
18 void spiltList_noChange(LinkNode * link, LinkNode *&L1, LinkNode *& L2) // 假设这个表的A、B元素相同, 不更改原链表
19 {
20     L1 = new LinkNode;
21     L2 = new LinkNode;
22     L2->next = nullptr;
23 
24     LinkNode * rear_L1; // 表尾指针
25     L1 = link;
26     rear_L1 = L1; 
27 
28     LinkNode *pre; //用来更新的元素
29     LinkNode * temp1, *temp2; //用来存储取出来的元素
30     pre = link->next; //指向第一个元素
31     while (pre != nullptr)
32     {
33         temp1 = new LinkNode;
34         temp2 = new LinkNode;
35 
36         temp1->name = pre->name;
37         rear_L1->next = temp1;
38         rear_L1 = temp1;
39 
40         pre = pre->next; //更新头结点
41 
42         temp2->name = pre->name;
43         temp2->next = L2->next;
44         L2->next = temp2;
45         pre = pre->next;
46     }
47     rear_L1->next = nullptr; // 表尾指针为空
48 }
49 
50 void splitList_change(LinkNode * &link, LinkNode * &L1, LinkNode *&L2) //假设原链表的A、B元素相同,改变原链表
51 {
52     L1 = link; //L1直接指向原链表的表头,使用尾插法
53     L2 = new LinkNode; //创建一个表头结点,使用头插法
54     L2->next = nullptr;
55 
56     LinkNode * rear_L1;// 表尾指针
57     rear_L1 = L1;
58 
59     LinkNode * temp;
60     LinkNode *pre = link->next; // 保存元素指针
61 
62     while (pre != nullptr)
63     {
64         rear_L1->next = pre;
65         rear_L1 = rear_L1->next;
66         pre = pre->next;
67 
68         temp = pre->next; //暂存首节点
69 
70         pre->next = L2->next;
71         L2->next = pre;
72         pre = temp; // 还原 首节点
73     }
74     rear_L1->next = nullptr; // 表尾指针置 nullptr
75 }

#仅供学习参考,大神请无视我#

 

posted on 2017-12-15 16:54  weibin_caffe  阅读(262)  评论(0)    收藏  举报

导航