zoukankan      html  css  js  c++  java
  • 将数字文件转成链表

    有一个文件里面都是一行一行的数字,用空格分开,请把它每行转化成一个链表。

    注意getline(ifstream, line)得到一行,而且使用了头结点。

    https://gist.github.com/Jiacai/9431341

    #include <string>
    #include <fstream>
    #include <iostream>
    using namespace std;
    
    struct ListNode {
        int val;
        ListNode *next;
        ListNode(int _val) {
            val = _val;
            next = NULL;
        }
    };
    
    /*
        123 456
    */
    void readFile(string fileName, ListNode** list, int lineLimit) {
        ifstream ifstrm(fileName);
        if(!ifstrm) {
            exit(1);
        }
        int i = 0;
        string line;
        while (getline(ifstrm, line) && i < lineLimit) {
            // parse this line
            ListNode* dummy = new ListNode(0);
            ListNode *last = dummy;
            int idx = 0;
            while (idx < line.length()) {
                // skip spaces
                while (idx < line.length() && line[idx] == ' ') {
                    idx++;
                }
                if (idx == line.length()) break;
                int num = 0;
                while (idx < line.length() && line[idx] != ' ') {
                    num = num * 10 + line[idx] - '0';
                    idx++;
                }
                ListNode* node = new ListNode(num);
                last->next = node;
                last = node;
            }
            last->next = NULL;
            list[i] = dummy->next;
            delete dummy;
            i++;
        }
        ifstrm.close();
    }
    
    int main() {
        const int LINE_COUNT = 100;
        ListNode* list[LINE_COUNT];
        memset(list, 0, sizeof(list));
        readFile("d:\test.txt", list, LINE_COUNT);
        for (int i = 0; i < LINE_COUNT; i++) {
            ListNode* current = list[i];
            if (current == NULL) break;
            while (current != NULL) {
                cout << current->val << "->";
                current = current->next;
            }
            cout << "NULL" << endl;
        }
        system("pause");
    }
    

    第二次写,数组里保存头结点:

    #include <string>
    #include <fstream>
    #include <iostream>
    using namespace std;
    
    struct Node
    {
    	int val;
    	Node *next;
    };
    
    void readFile(string fileName, Node** lineHead, int lenLimit)
    {
    	fstream f(fileName);
    	if (!f) {
    		exit(1);
    	}
    	string line;
    	int lineIdx = 0;
    	while (getline(f, line) && lineIdx < lenLimit)
    	{
    		lineHead[lineIdx] = new Node();
    		Node * current = lineHead[lineIdx];
    		// skip spaces at first
    		int i = 0;
    
    		while (i != line.length())
    		{
    			while (i < line.length() && line[i] == ' ')
    			{
    				i++;
    			}
    
    			if (i == line.length()) continue;
    
    			int num = 0;
    			// get a number
    			while (i != line.length() && line[i] != ' ')
    			{
    				num = num * 10 + (line[i] - '0');
    				i++;
    			}
    			Node * node = new Node();
    			node->val = num;
    			node->next = NULL;
    			current->next = node;
    			current = node;
    		}
    		lineIdx++;
    	}
    	f.close();
    }
    
    int main()
    {
    	const int LINE_COUNT = 100;
    	Node* list[LINE_COUNT];
    	memset(list, 0, sizeof(list));
    	readFile("d:\test.txt", list, LINE_COUNT);
    	for (int i = 0; i < LINE_COUNT; i++) {
    		if (list[i] == NULL) break;
    		Node* current = list[i]->next;
    		if (current == NULL)
    		{
    			cout << "NULL" << endl;
    			continue;
    		}
    		while (current != NULL) {
    			cout << current->val << "->";
    			current = current->next;
    		}
    		cout << "NULL" << endl;
    	}
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    3.4
    3.3 TensorFlow运行模型 ------- 会话
    3.2 TensorFlow数据模型 ---- 张量
    3.1 TensorFlow计算模型 --- 计算图
    寻找两个有序数组的中位数
    最长子串
    vector的遍历删除
    超时空大决战
    面经七
    面经五
  • 原文地址:https://www.cnblogs.com/lautsie/p/3588733.html
Copyright © 2011-2022 走看看