C程式設計 單鏈表的翻轉

2021-07-14 23:02:40 字數 1247 閱讀 3135

實現功能:

*/#include#include#include#includeusing namespace std;

typedef struct nodelist

node;

int listtotal=0;

node * creatlist(node *head)

p1->value=data;

p1->next=null;

if(head==null)

else

}return head;

}void printlist(node *head)

printf("一共有%d個節點\n",listtotal);

}node * reverselist(node *head)

return cp;

}node * insertlist(node * head,int index,int data)//需要建立兩個臨時變數 乙個用來給新建待插入的節點 另乙個用來遍歷的節點變數

p1=(node*)malloc(sizeof(node));

if(p1==null)

p1->next=null;

p1->value=data;

if(index==0)//插入頭

else

p1->next=p2->next;

p2->next=p1;

} return head;

}node * nodedelet(node * head,int index)

if(1==index)

else

p2=p1->next;

p1->next=p1->next->next;//這種思路是非常好的 只要找到刪除節點前面的乙個節點就可以了(已測試頭結點 中間 尾部節點 通過)

free(p2);

} return head;

}int main(void)

返回head不僅在子函式裡面返回 呼叫後要返回給原來的head head=insertlist(head,listtotal,-99);

核心功能:翻轉

while(np)

刪除p2=p1->next;

p1->next=p1->next->next;//這種思路是非常好的 只要找到刪除節點前面的乙個節點就可以了(已測試頭結點 中間 尾部節點 通過)

free(p2);

插入p1->next=p2->next;

p2->next=p1;

*/

單鏈表翻轉

關於單鏈表的翻轉問題頗為困擾人。下面寫的程式只需遍歷每個節點一次,並且不需要構造輔助接點 通過new的方式 另外這個問題可以轉換為乙個迴圈鍊錶結構,很有意思。h struct node class cdatastruct cpp檔案 cdatastruct cdatastruct void cdat...

單鏈表翻轉

1,原理 使用p和q兩個指標配合工作,使得兩個節點間的指向反向,同時用r記錄剩下的鍊錶。p head q head next head next null 現在進入迴圈體,這是第一次迴圈。r q next q next p p q q r 第二次迴圈。r q next q next p p q q ...

單鏈表翻轉

相比之前的那個方法 206.reverse linked list 這個方法比較簡單,直接在鍊錶上面進行逆序 容易理解 此 是用於將帶頭結點的單鏈表進行逆序,思路 1.首先設p結點為第乙個有效結點 即頭結點的下乙個節點 q為p的下乙個節點,原因從後面可知。2.將所給節點從頭結點處斷開,然後讓p結點的...