逆序创建链表及链表反转和中间位置反转
生活随笔
收集整理的這篇文章主要介紹了
逆序创建链表及链表反转和中间位置反转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 #include <iostream>
2 using namespace std;
3 typedef struct LNode
4 {
5 int data;
6 LNode *next;
7 }LNode,*LinkList;
8 //逆位序輸入n個元素的值,建立帶頭結點的單鏈線性表
9 LinkList createLinklist(LinkList &L)
10 {
11 L = (LinkList)malloc(sizeof(LNode));
12 L->next = NULL;//建立頭結點
13 for (int i = 0; i <= 10;i++) {
14 LinkList p = (LinkList)malloc(sizeof(LNode));
15 p->data = i;
16 p->next = L->next;
17 L->next = p;
18 }
19 return L;
20 }
21 //鏈表反轉
22 LinkList listReversal(LinkList &L)
23 {
24 LinkList preNode=NULL; //前一個節點
25 LinkList node = L->next; //后一個節點(L為頭結點)
26 LinkList nextNode = NULL;//中間節點
27 while (node!=NULL) {
28 nextNode = node->next; //保存下一個節點的值
29 node->next = preNode; //把當前節點的下一個節點指向preNode;
30 preNode = node; //將preNode向后移動指向此時的node
31 node = nextNode; //將node向后移動指向nextNode
32 }
33 L->next = preNode;
34 return L;
35 }
36 //中間位置反轉
37 LinkList middlePositionInversion(LinkList &L)
38 {
39 LinkList Lhead=L->next;
40 int num = 0;
41 while (Lhead) {//就算鏈表的長度
42 num++;
43 Lhead = Lhead->next;
44 }
45 LinkList curNode = L->next;
46 int i = 1;
47 while (i<num/2+1) {//尋找要反轉后的前一個節點的指針(退出循環后,第i個元素的指針為curNode)
48 i++;
49 curNode = curNode->next;
50 }
51 LinkList preNode=NULL;
52 LinkList node=curNode->next;
53 LinkList nextNode=NULL;
54 while(node!=NULL){
55 nextNode = node->next;
56 node->next = preNode;
57 preNode = node;
58 node = nextNode;
59 }
60 curNode->next = preNode;
61 return L;
62 }
63 int main()
64 {
65 LinkList linkList;
66 LinkList L=createLinklist(linkList);
67 //LinkList LL=listReversal(L);
68 LinkList LL = middlePositionInversion(L);
69 LL = LL->next;
70 while (LL) {
71 cout << LL->data << " ";
72 LL = LL->next;
73 }
74 cout << endl;
75 return 0;
76 }
?
轉載于:https://www.cnblogs.com/dingou/p/5828985.html
總結
以上是生活随笔為你收集整理的逆序创建链表及链表反转和中间位置反转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [原创]django+ldap实现统一认
- 下一篇: php内核探索 [转]